Извлечение данных из строк файла журнала в python

Мне нужно извлечь время (02/янв/2015:08:12), article_id и user_id

формат строки выглядит так:

67.15.143.7 - - [02/Jan/2015:08:12] "GET/click?article_id=25&user_id=104 HTTP/1.1" 200 2327
67.15.143.7 - - [02/Jan/2015:08:12] "GET/click?article_id=211&user_id=9408 HTTP/1.1" 200 380

Я новичок, и я искал в Google и переполнял стек, но не нашел способа решить эту проблему. Может кто-нибудь помочь мне? Спасибо!


person Ryueisan    schedule 13.04.2016    source источник
comment
Вы, вероятно, захотите начать читать об использовании регулярных выражений Python, модуль re, вероятно, получит всю информацию из строки, которую вы ищете. Изучение того, как писать регулярное выражение, может быть крутой кривой обучения, но в долгосрочной перспективе оно окупится. Программы-анализаторы журналов, такие как logstash, активно используют регулярное выражение для извлечения информации.   -  person Rumbles    schedule 14.04.2016


Ответы (1)


Простое регулярное выражение может извлечь это.

>>> import re
>>> s = '''67.15.143.7 - - [02/Jan/2015:08:12] "GET/click?article_id=25&user_id=104 HTTP/1.1" 200 2327
... 67.15.143.7 - - [02/Jan/2015:08:12] "GET/click?article_id=211&user_id=9408 HTTP/1.1" 200 380'''
>>> re.findall('\[(.*?)\].*?article_id=(\d+).*?user_id=(\d+)',s)
[('02/Jan/2015:08:12', '25', '104'), ('02/Jan/2015:08:12', '211', '9408')]

Используйте re.search вместо re.findall, если хотите применить шаблон к отдельным строкам.

person timgeb    schedule 13.04.2016