.split() 不会拆分一行中的所有单词

.split() does not split all the words in a line

这是练习: “编写一个程序,将每封邮件消息分类 提交是在一周中的哪一天完成的。要做到这一点寻找线 以“From”开头,然后寻找第三个单词并保留 运行 计算一周中的每一天。在程序结束时打印 出字典的内容(顺序无关紧要)。 样品线: 从 stephen.marquard@uct.ac.za 星期六 09:14:16 2008" 我需要将这些类型的行从我的文件中拆分出来,但在输出中只显示零和第一个位置(发件人和电子邮件地址)而不是其他单词。输出错误是:“列表索引超出范围”。 这是我的代码:

file1= open('short.txt')
counts= dict()
for line in file1:
    line = line.rstrip()
    if not line.startswith('From: '): continue
    splited = line.split()
    print(splited)
    day= splited[2]
    counts[day]= counts.get(day,0)+1
print('Count of days:',counts)

请熟悉邮箱文件格式:https://en.wikipedia.org/wiki/Mbox,您的输入文件可能是它的一些变体。

您要解析的“发件人”行包含 "From " 且没有分号,并且它位于已保存邮件的开头。

"From: " 行(带分号)是消息 headers 的一部分并且具有不同的语法 - 它包含地址,而不是日期。 headers 通过空白链接与消息 body 分开。您应该转到空白行的下一条消息。

您正在搜索以 From: 开头的行,而您想要的行以 From 开头,我认为下面的代码应该适合您:

counts = {}
with open('short.txt') as file1:
    for line in file1:
        line = line.strip()
        if line.startswith('From '):
            day = line.split()[2]
            counts[day] = counts.get(day ,0) + 1    
print (counts)

输出:

{'Sat': 1, 'Fri': 20, 'Thu': 6}