-1

提示:

编写一个程序,根据提交完成的星期几对每封邮件进行分类。为此,请查找以“from”开头的行,然后查找第三个单词并记录一周中每一天的运行计数。在程序结束时打印出字典的内容(顺序无关紧要)。

Python 3 中的代码:

fname = input('enter file name:')
fhand = None
days = dict()

try:
    fhand = open(fname)
except:
    print(fname, 'is not a file thank you have a nice day and stop trying to ruin my program\n')
    exit()

for line in fhand:
    sline = line.split()
    if line.startswith('From'):
        print (sline)
        day = sline[2]
        if day not in days:
            days[day] = 1
        else:
            days[day] += 1
print(days)

问题:

['From', 'stephen.marquard@uct.ac.za', 'Sat', 'Jan', '5', '09:14:16', '2008']
**['From:', 'stephen.marquard@uct.ac.za']**
Traceback (most recent call last):
  File "C:\Users\s_kestlert\Desktop\Programming\python\chap9.py", line 13, in <module>
    day = sline[2]
IndexError: list index out of range

文件: http: //www.py4inf.com/code/mbox-short.txt

为什么.split将线切割成只有[0][1]

我该如何规避这个?

4

3 回答 3

3

查看您链接的文件,我认为您需要将您的文件更改line.startswith('From')line.startswith('From ')(注意尾随空格)。当我认为您只想要包含更多信息From: ...的行时,标题行正在匹配(并且只有 2 个单词) 。From ...

于 2017-11-03T16:51:39.287 回答
2

你的程序在线崩溃

From: stephen.marquard@uct.ac.za

稍后出现(第 38 行),而不是文件的第一行。

sline在尝试从中获取日期字段之前,请检查以确保有足够的元素。

于 2017-11-03T16:50:50.840 回答
0

对于文件 file.txt

From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008
From: stephen.marquard@uct.ac.za

你的程序输出

enter file name:file.txt
['From', 'stephen.marquard@uct.ac.za', 'Sat', 'Jan', '5', '09:14:16', '2008']
['From:', 'stephen.marquard@uct.ac.za']
Traceback (most recent call last):
  File "test.py", line 13, in <module>
    day=sline[2]
IndexError: list index out of range

这是因为第二行没有第三个单词。您需要在程序中实现错误控制。

于 2017-11-03T16:48:07.750 回答