我正在尝试整理一些电子邮件。发送了一封特定的电子邮件,我想知道是谁回复了。我已经制定了两个csv文件,一个包含电子邮件请求,另一个包含电子邮件回复,两个都有标题;主题,收件人,来自,日期。
不幸的是,电子邮件回复了来自&#39;来自&#39;格式为(Joe Bloggs <joebloggs@gmail.com>)
,而电子邮件请求&#39; To&#39;格式为(joebloggs@gmail.com)
。所以我不能直接将它们联系起来,因为它们不相同所以我需要搜索字符串(电子邮件地址)
这是我目前的代码
import csv
req=open('DESmailrequests.csv', 'rb')
requests=csv.reader(req)
rep=open('Desmailreplies.csv', 'rb')
replies=csv.reader(rep)
comparison = open('DESmailrequests.csv', 'wb')
writer = csv.writer(comparison)
for row in replies:
replies_2=row[2]
replies_2 = set(replies_2)
碰撞一下。基本上我希望能够说,如果来自回复[2]中的请求[1]的string/phrase
,请在请求中写下新行,并回复&#39; /&#39;不回复&#39;
for row in requests:
if row[1] in replies_2:
writer.writerow(row[3])
req.close()
rep.close()
comparison.close()
到目前为止,这还没有工作,我只是得到一个空白的csv。我很感激任何可能的帮助。
到目前为止,使用Python对这些~100,000封电子邮件进行排序是一个绝对的爆炸而且相对简单!刚刚碰到最后一道障碍。
答案 0 :(得分:0)
错误在:
comparison = open('DESmailrequests.csv', 'wb')
执行此操作时,您将创建一个新的“DESmailrequests.csv”空文件。 csv阅读器正在读取一个空文件,所以:
for row in requests:
导致什么都不做。
您应该以“追加”模式打开文件:
comparison = open('DESmailrequests.csv', 'ab')
答案 1 :(得分:0)
我在您的代码中看到了一些问题。第一个,以及您获取空文件的原因是:
comparison = open('DESmailrequests.csv', 'wb')
您正在删除自己的文件。你为什么不打开新文件?用另一个名字?
其次,您自己说过,From列表无法与回复列表进行比较。所以你试图错误地将字符串与列表进行比较。
In [5]: senders = {"Joe Bloggs <joebloggs@gmail.com>", "Foo Bar <foo.bar@example.com>"}
In [6]: senders
Out[6]: {'Foo Bar <foo.bar@example.com>', 'Joe Bloggs <joebloggs@gmail.com>'}
In [7]: "Foo Bar" in senders
Out[7]: False
请注意,这不会起作用:
In [15]: "<foo.bar@example.com>" in {"Joe Bloggs <joebloggs@gmail.com>", "Foo Bar <foo.bar@example.com>"}
Out[15]: False
在进行比较之前,您需要使用一些正则表达式或python逻辑清理sendres列表:
In [8]: def extract_mail(str):
...: return str[str.index('<'):str.index('>')+1]
...:
In [9]: map(extract_mail, senders)
Out[9]: ['<joebloggs@gmail.com>', '<foo.bar@example.com>']
现在你可以做比较了。
以下是以比较方式提取电子邮件的正确方法:
In [18]: def extract_mail(str):
return str [str.index('<')+1:str.index('>')]
....:
In [19]: map(extract_mail, {"Joe Bloggs <joebloggs@gmail.com>", "Foo Bar <foo.bar@example.com>"})
Out[19]: ['joebloggs@gmail.com', 'foo.bar@example.com']
所以现在你的搜索工作:
In [20]: "joebloggs@gmail.com" in ['joebloggs@gmail.com', 'foo.bar@example.com']
Out[20]: True