|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|
Парсинг текста28.06.2021, 13:31. Показов 3964. Ответов 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
Парсинг текста парсинг текста Парсинг текста Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|