0

一連のメールが多数あります。この文字列を個別のメールに分割する必要があります。各メールは、新しい行の「From:」で始まります。本文の他の場所に「From:」がない場合、次のように動作します -

list_of_email_strings = re.split("From:", my_email_text_string)

ただし、改行直後に発生しない「From:」は無視する必要があります。次の (キャレット付き) は機能しません -

list_of_email_strings = re.split("^From:", my_email_text_string)

解決 ?

4

2 に答える 2

1

wim の回答に似ていますが、From: が必要に応じてメールに追加されます。

list = ['From:' + msg for msg in ('\n' + text).split('\nFrom:')]

ただし、説明したような電子メールファイルの読み取りをより細かく、より信頼性の高い制御を提供するネイティブの Python モジュールがあります。メールメールボックスが思い浮かびます。

これらが標準の mbox スタイルのメールで、各ファイルが「From:」で始まり、いくつかのヘッダー行、場合によってはダイジェストなどであると仮定すると、sendmail や Postfix で使用されるようなものです。文字列をファイルにするか、単に既存のファイルを使用します。

mbox = mailbox.mbox(path_to_mailbox_file)
mbox.lock()  # only if you're using an active mailbox file
message_strings = [message.as_string() for message in mbox]
mbox.unlock()  # again, only if you're using an acture mailbox file
mbox.close()

メッセージの数を取得するには、単に使用しますlen(mbox)

他にも便利な機能がたくさんあります。これらのモジュールを使用していくつかのスクリプトを作成し、その結果に非常に満足しています。as_string(ヘッダーの一部を再フォーマットする可能性があることに注意してください。)

于 2013-10-23T00:59:44.470 に答える