|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|
Парсинг текста28.06.2021, 13:31. Показов 3830. Ответов 22
Метки нет (Все метки)
По служебной необходимости столкнулся с ситуацией парсинга текста. С Python я знаком шапочно, к сожалению, поэтому прошу помощи.
Задача такая: на вход подается строка, где могут присутствовать (а могут и нет) некие, скажем так, "функции" имеющие примерно такой вид "Имя_Функции(Параметры)". Мне нужно "вычленить" из этой строки эти функции, затем их посчитать и вставить обратно уже результат. Есть список имен этих "функций". Я могу сделать это "в лоб" примитивными программными средствами - найти первое совпадение с именем, сохранить позицию, затем посимвольно считать "параметры" от открывающей скобки и до закрывающей, сохранить длину всей функции, затем вставить результат, но мне бы хотелось использовать средства Python, т.к., он (насколько я знаю) как раз силен в подобных задачах. Возможно, это нужно делать регулярными выражениями, но если выражение в скобках я еще смогу обернуть в регулярки, то учесть Имя функции я уже не знаю как.
0
|
|
| 28.06.2021, 13:31 | |
|
Ответы с готовыми решениями:
22
Парсинг текста Парсинг и замена текста в html (python3) |
|
Автоматизируй это!
|
|
| 28.06.2021, 13:48 | |
|
Constcat, да тут скорее всего именно регулярки подойдут, и это
А если без регулярок можно то тоже подскажем, но надо увидеть что там.
0
|
|
|
|
||||||||
| 28.06.2021, 14:01 | ||||||||
|
Отталкивайтесь от этого:
0
|
||||||||
|
Костыли любой сложности
201 / 146 / 36
Регистрация: 27.10.2019
Сообщений: 843
|
|
| 28.06.2021, 14:03 | |
|
0
|
|
|
Модератор
|
||||||
| 28.06.2021, 14:12 | ||||||
1
|
||||||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||||
| 28.06.2021, 15:37 [ТС] | ||||
|
Функции типа PROJECT_NAME(=,"Проект1") / PROJECT_START(>, "01.24.2021") / т.д. На самом деле, имена могут быть любыми, они в константном списке находятся типа functionList = ["PROJECT_NAME", "PROJECT_START",...] Функции изначально находятся в Экселевском листе, в обычных ячейках. Мне нужно прочитать лист, пробежаться по всем ячейкам, и заменить все найденные "функции" их значениями, отфильтровав по условию в круглых скобках. Но эта задача другая, для начала мне нужно определиться с парсингом. Это что-то типа конструктора отчетов. Добавлено через 6 минут Добавлено через 4 минуты Спасибо!
0
|
||||
|
Костыли любой сложности
201 / 146 / 36
Регистрация: 27.10.2019
Сообщений: 843
|
|
| 28.06.2021, 15:40 | |
|
Constcat, наверное раз третий сегодня пишу "модуль inspect и code" там как бы есть доступ к названиям функций и строкам где они вызываются.
0
|
|
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 28.06.2021, 15:50 [ТС] | ||
|
Ситуация осложняется тем, что основной софт - кроссплатформенный, написан на C++. Python обслуживает различного рода отчеты, он "прилинковывается" к основному софту в виде .DLL + минимальный набор его модулей в виде .zip файла. Причем некоторые его настройки, типа системных путей и подключение некоторых модулей (типа StringIO) настраиваются прямо из софта. Другими словами, минимально-необходимый набор библиотек и модулей Python интегрирован прямо в софт. В этой каше мне не удалось даже tkinter подключить для вывода хотя бы хоть какой-то отладочной информации. Отладка в этой ситуации - это отдельная задача...
0
|
||
|
|
|||
| 28.06.2021, 16:32 | |||
|
Добавлено через 1 минуту Добавлено через 2 минуты Чтобы иметь возможность вызывать Excel функцию или макрос нужно работать с COM объектом Excel.Application.
0
|
|||
|
Костыли любой сложности
201 / 146 / 36
Регистрация: 27.10.2019
Сообщений: 843
|
||||||
| 28.06.2021, 16:44 | ||||||
|
(в курсе что ppt не xls) но ты умеешь грамотно формулировать вопрос?
0
|
||||||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||||||||
| 28.06.2021, 16:56 [ТС] | ||||||||
|
Если интересно, это выглядит примерно так:
Меня очень заинтересовала возможность Python вызывать функции по имени, хранящемся в строковой переменной. Скорее всего, я перепишу часть уже написанного кода с учетом этой возможности. Это очень упростит дальнейшую обработку данных Добавлено через 1 минуту
0
|
||||||||
|
|
||
| 28.06.2021, 17:06 | ||
|
Каким образом Python может выполнить VBA функцию (без COM объекта Excel.Application)?
0
|
||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 28.06.2021, 17:13 [ТС] | ||
|
Функция - моя. Не Экселевская. В Экселе они выглядят, как "функции-заглушки", возвращающие собственное имя (для удобства пользователя. И до посещения этого форума, это вообще были не функции, а спец. слова, изображающие функции. Я их распознавал простыми примитивными программными способами и таким же образом (через if - elif - elif...) заменял на реальные значения. В этой ветке я узнал, что Python может вызвать реальную функцию по ее имени, хранящейся в строковой переменной. В связи с этим (и с тем, что мне дополнительно нужно обрабатывать параметры в скобках (их раньше не было, это дополнение к постановке задачи)), я хочу из этих спец. символов сделать реальные функции Python и вызывать их вышеуказанным методом. Повторю идею - в Экселе в ячейках расположены некие спец. символы. При помощи Python, я читаю лист, собираю эти спец.символы, заменяю их реальными значениям, вставляю их в те же места, откуда брал и сохраняю в другом листе.
0
|
||
|
|
||||||
| 28.06.2021, 17:24 | ||||||
|
Ничего не понял. Слишком хитромудро и непонятно зачем.
Вот эти имена PROJECT_NAME(=,"Проект1") / PROJECT_START(>, "01.24.2021") на Python функции никак не похожи и вызывать ты их никак не сможешь даже после парсинга имен. Впрочем, варианты регулярок здесь уже были предложены. Дерзай.
0
|
||||||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 28.06.2021, 17:34 [ТС] | ||
|
2. Есть пользователи, которые хотят видеть эти данные в красивом формате Экселя. 3. Специально для этих пользователей мы придумали спец. слова, соответствующие этим данным, которые можно расставить в нужных местах Экселевского листа, который будет являться что-то типа шаблона-заготовки будущего отчета. 4. Потом наш софт при помощи интегрированного Python читает этот лист, заменяет эти спец. слова актуальными данными, вставляет в те же места, заменяя спец. слова и сохраняет в другой лист. Таким образом появляется отчет с реальными данными. Выглядит это примерно так:
0
|
||
|
|
||||||
| 28.06.2021, 17:35 | ||||||
|
Если нужно сразу разбить параметры на список, то можно все в словарь замапить:
0
|
||||||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||||||||
| 28.06.2021, 17:41 [ТС] | ||||||||
Судя по приведенному примеру, я могу получить имя функции, а параметры передать уже те, которые нужны. Добавлено через 3 минуты Для числовых, соответственно, =, <>, >, <, >=, <= Ну, и для даты такие же, как и для чисел.
0
|
||||||||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 29.06.2021, 14:29 [ТС] | ||
|
Вот, не получается разобрать подобные строки. Слаб в регулярках, к сожалению... ![]() PROJECT_DURATION(>,50) - TASK_DURATION(=,70) - на выходе должны получится имена двух функций PROJECT_DURATION с параметром "<,50" и TASK_DURATION с параметром "=,70". PROJECT_COST(<,1000) * 365 - аналогично. Нужно получить PROJECT_COST с параметром "<,1000" "Manager " + PRROJECT_NAME(=,Иванов) - PRROJECT_NAME, параметр "=,Иванов" И еще. К сожалению, мы вынуждены использовать Python 2.7. Стоит вопрос о переходе на следующую версию, но это будет позже.
0
|
||
| 29.06.2021, 14:29 | |
|
Помогаю со студенческими работами здесь
20
Парсинг текста парсинг текста Парсинг текста Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|