次のような Cc ヘッダー フィールドのプレーン テキストがあります。
friend@email.com, John Smith <john.smith@email.com>,"Smith, Jane" <jane.smith@uconn.edu>
これを適切に解析するための戦闘テスト済みのモジュールはありますか?
(Pythonの場合のボーナス!メールモジュールは、分割する方法なしで生のテキストを返すだけです、AFAIK)(名前とアドレスをフィールドに分割する場合もボーナス)
次のような Cc ヘッダー フィールドのプレーン テキストがあります。
friend@email.com, John Smith <john.smith@email.com>,"Smith, Jane" <jane.smith@uconn.edu>
これを適切に解析するための戦闘テスト済みのモジュールはありますか?
(Pythonの場合のボーナス!メールモジュールは、分割する方法なしで生のテキストを返すだけです、AFAIK)(名前とアドレスをフィールドに分割する場合もボーナス)
標準の Python モジュールとして利用できる関数がたくさんありますが、 email.utils.parseaddr()またはemail.utils.getaddresses( )を探していると思います。
>>> addresses = 'friend@email.com, John Smith <john.smith@email.com>,"Smith, Jane" <jane.smith@uconn.edu>'
>>> email.utils.getaddresses([addresses])
[('', 'friend@email.com'), ('John Smith', 'john.smith@email.com'), ('Smith, Jane', 'jane.smith@uconn.edu')]
複数の電子メール文字列を辞書に変換します (名前が含まれる複数の電子メールを 1 つの文字列に変換します)。
emailstring = 'Friends <friend@email.com>, John Smith <john.smith@email.com>,"Smith" <jane.smith@uconn.edu>'
文字列をコンマで分割
email_list = emailstring.split(',')
name をキー、email を値にして辞書を作成します。
email_dict = dict(map(lambda x: email.utils.parseaddr(x), email_list))
このような結果:
{'John Smith': 'john.smith@email.com', 'Friends': 'friend@email.com', 'Smith': 'jane.smith@uconn.edu'}
ノート:
異なる電子メール ID を持つ同じ名前がある場合、1 つのレコードはスキップされます。
'Friends <friend@email.com>, John Smith <john.smith@email.com>,"Smith" <jane.smith@uconn.edu>, Friends <friend_co@email.com>'
「フレンズ」が2回複製されます。
私自身は使用していませんが、csvパッケージを使用してデータを簡単に解析できるようです。