好的,我有电子邮件的文本文件,我需要提取"从","到"," CC",&#34受试者#34;和"日期"字段并按以下格式将它们写入CSV:
Date Subject From To CC
文件类似于:
From: "John Smith" <jsmith@jsmith.com>
To: <john.doe.1@gmail.com>, <john.doe.2@gmail.com>,
<john.doe.3@gmail.com>, <john.doe.4@gmail.com>,
<john.doe.6@yahoo.com>, <john.doe.5@gmail.com>, <jdoe@live.com>,
<j.doe.5@live.com>
CC:
Subject: Test Email Extraction
Date: Sun, 6 Apr 2014 19:30:55 -0400
-----------------
Testing Email extraction.
我遇到的问题是&#34; TO&#34;和&#34; CC&#34;行几乎总是有许多条目占用多行。
我认为提取此信息以放入CSV的解决方案是使用REGEX,但我根本没有运气......
甚至没有接近。
有什么建议吗?
答案 0 :(得分:0)
我可以使用python的re.S
标志使用下面的正则表达式来获取您想要的数据。
r'(From:.*).*(To:.*).*(CC:.*).*(Subject:.*).*(Date:.*)'
你可以这样做:
In [1]: data = '''
...: From: "John Smith" <jsmith@jsmith.com>
...: To: <john.doe.1@gmail.com>, <john.doe.2@gmail.com>,
...: <john.doe.3@gmail.com>, <john.doe.4@gmail.com>,
...: <john.doe.6@yahoo.com>, <john.doe.5@gmail.com>, <jdoe@live.com>,
...: <j.doe.5@live.com>
...: CC:
...: Subject: Test Email Extraction
...: Date: Sun, 6 Apr 2014 19:30:55 -0400
...: -----------------
...: Testing Email extraction.
...: '''
In [2]: import re
In [3]: results = re.findall(r'(From:.*).*(To:.*).*(CC:.*).*(Subject:.*).*(Date:.*)', data, re.S)
In [4]: headers = ['From', 'To', 'CC', 'Subject', 'Date']
In [6]: data = [item.strip() for item in results[0]]
In [7]: data
Out[7]:
['From: "John Smith" <jsmith@jsmith.com>',
'To: <john.doe.1@gmail.com>, <john.doe.2@gmail.com>,\n<john.doe.3@gmail.com>, <john.doe.4@gmail.com>,\n<john.doe.6@yahoo.com>, <john.doe.5@gmail.com>, <jdoe@live.com>,\n<j.doe.5@live.com>',
'CC:',
'Subject: Test Email Extraction',
'Date: Sun, 6 Apr 2014 19:30:55 -0400\n-----------------\nTesting Email extraction.']
您的结果位于data
列表中。使用带有csv
的{{1}}模块作为分隔符,并以所需格式写出标题和数据。当然,那里有\t
个,但你可以在写入文件之前遍历列表中的项目来删除它们。
希望这有帮助。