Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 17, 2013 16:51:42

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Здравствуйте! В чём фокус - надо найти по регулярке часть текста в разных файлах. Проблема начинается, когда файл очень большой, например от 2 гб и выше. Поэтому помещать в оперативу не идёт. Читать построчно - тоже не идёт, ибо регулярки всякие бывают - может быть такой шаблон, что совпадёт кусок, который состоит из 50 строк, а то и более… Использовать grep хотелось бы, но этот скрипт должен работать и под виндой… Посмотрел исходники грепа, и алогритмы и прифигел немножко - вряд ли такое смогу запрогать )
В общем, подскажите, кто что может, буду премного благодарен.



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#2 Ноя. 17, 2013 22:57:19

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

вот сходу подумал о том что бы читать порциями и реализовывать “перектытие”, если что то отсекать повторяющиеся результаты регулярок…ну это так, в порядке бреда мыслей…



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Ноя. 18, 2013 05:43:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Master_Sergius
надо найти по регулярке часть текста в разных файлах
конкретный пример приведи
пока неясно, почему ты выбрал именно регулярные выражения



Офлайн

#4 Ноя. 18, 2013 08:10:39

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

попробовать сделать LazyString (авто подгрузка) или заюзать grep

Офлайн

#5 Ноя. 18, 2013 12:06:22

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Насчёт примера, кратко изложу суть задачи.
Есть много разных програм, которые постоянно пишут в логи что-то… Ежедневно надо проверять эти логи на наличие разных кусков текста. И вот когда есть такие куски как

[144, 24]
(а цифры могут быть разные), или “INFO: что-то + айпишник” или “ERROR: что-то + айпишник”, ну и так далее. Иногда, эти куски могут занимать несколько строк. Вот такая беда…
Вариант насчёт считывания порций - интересен… А что если кто-то всунет регулярку, которая покрывает весь файл? что-то а-ля (\s|\S)*



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Отредактировано Master_Sergius (Ноя. 18, 2013 12:13:36)

Офлайн

#6 Ноя. 18, 2013 12:48:24

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Master_Sergius
(а цифры могут быть разные), или “INFO: что-то + айпишник” или “ERROR: что-то + айпишник”, ну и так далее.

Файл весь покажи, если очень большой, то кусок давай. Понятнее станет, что нужно.



Офлайн

#7 Ноя. 18, 2013 12:50:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

А что если Вам задуматься не над программой, которая парсит готовый лог, а замутить нечто такое, что этот лог заменяет? То есть теоретически Вы же можете направить вывод лога не в файл, а в программу? А программа, получая небольшие порции данных пусть их парсит каким-то методом в зависимости от того, откуда эти данные пришли.



Офлайн

#8 Ноя. 18, 2013 13:06:25

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Ну как так файл показать, это ж должно быть универсальное решение. Уточню суть задачи. Есть разные проги (чужие) и есть конкретные тесты (тоже чужие). То есть, грубо говоря, задача в целом - автоматическое тестирование программ. И вот парсить надо именно готовые логи. При этом, что для каждой проги разные куски искать, естественно все всегда искали регулярками. Только делали всё через греп, который вызывали через subprocess, а теперь появились и виндовые проги, и хотели тестить тем же модулем, но греп уже не идёт…



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#9 Ноя. 18, 2013 13:23:07

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Master_Sergius
а теперь появились и виндовые проги, и хотели тестить тем же модулем, но греп уже не идёт…

C:\>cat 1.txt | grep -E xml
<?xml version="1.0" encoding="windows-1251"?><BSDocument><TARIFFS><RECORD><Tarif
fGUID>1</TariffGUID>



Офлайн

#10 Ноя. 18, 2013 13:31:06

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Поиск по шаблону в очень большом файле

Budulianin
C:\>cat 1.txt | grep -E xml
Что за чит? С линукса монтировать виндовый раздел? Это плохой вариант…



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version