Python 我的程序无法按顺序正确读取文件中的行

Python 我的程序无法按顺序正确读取文件中的行,python,text-files,raw-input,Python,Text Files,Raw Input,这是PythonforEveryone的作业第10章作业10.2,其中问题是 编写一个程序来通读mbox-short.txt,并计算出每一条消息在一天中按小时的分布情况。通过查找时间,然后使用冒号再次拆分字符串,可以从“from”行中提取小时。 “从person@example.com星期六2008年1月5日09:14:16“ 累积每小时的计数后,打印计数,按小时排序,如下所示 所需输出为 04 3 06 1 07 1 09 2 10 3 11 6 14 1 15 2 16 4 17 2 18

这是PythonforEveryone的作业第10章作业10.2,其中问题是

编写一个程序来通读mbox-short.txt,并计算出每一条消息在一天中按小时的分布情况。通过查找时间,然后使用冒号再次拆分字符串,可以从“from”行中提取小时。 “从person@example.com星期六2008年1月5日09:14:16“ 累积每小时的计数后,打印计数,按小时排序,如下所示

所需输出为

04 3
06 1
07 1
09 2
10 3
11 6
14 1
15 2
16 4
17 2
18 1
19 1
我的密码在这里

`name = raw_input("Enter file:")
if len(name) < 1 : name = "mbox-short.txt"
handle = open(name)
counts = dict()

for line in handle:
    line = line.rstrip()
    if line.startswith("From "):
        parts = line.split()
#        print parts
        time = parts[5]
        pieces = time.split(':')
        hour = pieces[0]
        counts[hour] = counts.get(hour,0)+1
print counts `
`name=raw\u输入(“输入文件:”)
如果len(name)<1:name=“mbox short.txt”
句柄=打开(名称)
计数=dict()
对于线输入句柄:
line=line.rstrip()
如果行开始于(“起始”):
parts=line.split()
#打印部件
时间=部分[5]
碎片=时间。拆分(“:”)
小时=件[0]
计数[小时]=计数。获取(小时,0)+1
打印计数`
文本文件可以在这里找到 在调试时,我意识到我的编译器会多次遍历每一行,以返回太高的每一小时的值。我确信语法
line.startswith(“From”)
仅适用于读取预期的行,因为我在以前的作业中使用了


如何获得正确的小时频率?

您的代码在我尝试时运行良好

对于输出,字典是未排序的。 您可以使用sort(counts)返回键的排序列表。有了这些,你可以按顺序打印你的口述

name = raw_input("Enter file:")
if len(name) < 1 : name = "mbox-short.txt"
handle = open(name)
counts = dict()

for line in handle:
    line = line.rstrip()
    if line.startswith("From "):
        parts = line.split()
        time = parts[5]
        pieces = time.split(':')
        hour = pieces[0]
        counts[hour] = counts.get(hour,0)+1

for key in sorted(counts):
    print key + " " + str(counts[key])

如果你展示了你的实际输出,这会有所帮助。这是一个制表符和空格混合的问题。Python不像您那样看待缩进。在编辑器中打开“显示空白”以查看问题;您的编辑器可能还具有“将选项卡转换为空格”功能来修复它。运行带有
-tt
标志的Python可以帮助捕获这些错误。谢谢,这似乎是一个缩进错误。在我的编辑器中启用该选项对于编写代码来说是一个非常有用的更改。谢谢在python中成长时的小提示:阅读集合;collections.defaultdict是我的目标,但我认为还有一个是专门为您的用例设计的(计数器?)。。。具体来说,您可以执行counts[hour]+=1,而不必担心counts是否将hour作为键,如果counts是例如defaultdict(int)
04 3
06 1
07 1
09 2
10 3
11 6
14 1
15 2
16 4
17 2
18 1
19 1