Вот быстрая и грязная попытка реализовать генератор для чтения в файле mbox
сообщения за сообщением. Я решил просто отбросить информацию из разделителя From
; Я предполагаю, что, возможно, реальная библиотека mailbox
может предоставить больше информации, и, конечно, она поддерживает только чтение, а не поиск или запись во входной файл.
#!/usr/bin/env python3
import email
from email.policy import default
class MboxReader:
def __init__(self, filename):
self.handle = open(filename, 'rb')
assert self.handle.readline().startswith(b'From ')
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
self.handle.close()
def __iter__(self):
return iter(self.__next__())
def __next__(self):
lines = []
while True:
line = self.handle.readline()
if line == b'' or line.startswith(b'From '):
yield email.message_from_bytes(b''.join(lines), policy=default)
if line == b'':
break
lines = []
continue
lines.append(line)
Использование:
with MboxReader(mboxfilename) as mbox:
for message in mbox:
print(message.as_string())