这是来自Coursera.org课程“ Python for Everybody”的问题,在该课程中,我必须查找并打印包含从名为“ mailbox-short.txt”的文本发送的最多邮件数量的电子邮件ID。问题陈述是:
编写一个程序以通读mbox-short.txt并找出谁发送了最多的邮件。该程序将查找“发件人”行,并将这些行的第二个单词作为发送邮件的人。该程序创建一个Python字典,该字典将发件人的邮件地址映射到它们出现在文件中的次数计数。生成字典后,程序将使用最大循环遍历字典,以找到最多产的提交者。
我尝试了以下方式:
name = input("Enter file:")
if len(name) < 1 : name = "mbox-short.txt"
handle = open(name)
count=dict()
for line in handle:
line=line.rstrip()
if not line.startswith('From'):
continue
else:
words=line.split()
mail=words[1]
count[mail]=count.get(mail,0)+1
x=list(count.values())
y=max(x)
for email, num in count.items():
if num ==y:
email_id=email
print(email_id,y)
现在错误是每次我运行此代码时,它都会快速运行,但结果变成两倍。就像,预期的结果是
cwen@iupui.edu 5
但我知道
cwen@iupui.edu 10.
我什至打印了整个词典,看到所有邮件ID的已发送邮件数量翻了一番。
本课程的“列表”部分给出了基于相同文本的类似问题,需要找到发件人的电子邮件ID。在这种情况下,我的代码也给出了双重结果。例如,预期结果是:
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
但是实际结果是:
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
cwen@iupui.edu
我不明白是什么问题。你能帮我吗?
提到的名为“ mbox-short.txt”的文件可以在这里找到:
https://www.py4e.com/code3/mbox-short.txt
答案 0 :(得分:1)
您的代码完全按照您的要求执行。它正在寻找以"From"
开头的行。在文件中,第一封电子邮件有两行,如下所示:
From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008
然后在同一封电子邮件中:
From: stephen.marquard@uct.ac.za
。
您的代码正在计算这两行。根据问题规范,您应该寻找"From "
-例如从开始,后面跟一个空格。