@SymerDiff

Как распарсить лог на python?

Есть лог почтового сервера из которого нужно изъять: отправителя, получателя и статус отправки (успешно или ошибка)
Есть регулярное выражение для поиска email и статуса:
reg_email = r'(from=<[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.>]+|status=\w{1,20})'


Считываю файлы с лога:
def reader(filename):
    reg_email = r'(from=<[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.>]+|status=\w{1,20})'
    reg_email1 = r'(to=<[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.>]+status=\w{1,20})'
    with open(filename) as f:
        log = f.read()
        list_email = re.findall(reg_email, log)
        list_email1 = re.findall(reg_email1, log)
        return list_email, list_email1

На выходе имею 2 больших списка. Нужно вывести всё в csv (email-кол-во запросов-статус). Каким способом можно решить эту задачу? Спасибо!
  • Вопрос задан
  • 341 просмотр
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Для подсчёта можно использовать collections.Counter.
Модуль csv для формирования csv файла.
Если задача позволяет, не надо сначала загружать всё в память, а потом выгружать в csv - лучше выгружать по мере нахождения строк. Но чтобы дать подробный совет, нужно видеть пример искомых строк в лог файле.
Также, если выражение применяется более чем 1-2 раза, посоветую использовать re.compile() с последующим методом .findall() вместо просто re.findall(), чтобы не компилить регулярку при каждом запросе.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы