Всем доброго времени суток.
Подскажите, написал несложный парсер лог-файла fetchmail. Результатом анализа является словарь. Суть в том, что я искал строку в которой есть подстрока 'Domain not found', из неё получал почтовый адрес и мне нужна была еще предыдущая строка, строка в которой указано для какого пользователя выполнялось действие:
fetchmail: reading message manager@domain.ru@imap.yandex.ru:1 of 1 (1515 header octets) (log message incomplete)
fetchmail: SMTP error: 450 4.1.8 <postmaster@domain.local>: Sender address rejected: Domain not found
Алгоритм получился такой:
previos_str = ''
with open(logfile, 'r', encoding='utf-8') as log:
for line in log.readlines():
if 'Domain not found' in line:
if previos_str:
recipient_addr = previos_str.split('fetchmail: reading message ', 1)[1].split('@imap.yandex.ru')[0]
sender_addr = line.split('fetchmail: SMTP error: 450 4.1.8 <', 1)[1].split('>: Sender address rejected: Domain not found')[0]
if recipient_addr not in result_parse:
result_parse.setdefault(recipient_addr, [sender_addr])
elif sender_addr not in result_parse[recipient_addr]:
result_parse[recipient_addr].append(sender_addr)
previos_str = line
Меня смущает костыль
previos_str = line. Можно как-то еще обратиться к предыдущей строке?