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

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

Войти через центр авторизации
Похожие вопросы