【问题标题】:My program is not correctly reading lines from a file sequentially我的程序没有按顺序从文件中正确读取行
【发布时间】:2018-02-24 23:06:56
【问题描述】:

这是来自 Python For Everyone 第 10 章作业 10.2 的作业,其中问题状态

编写一个程序来通读 mbox-short.txt 并计算出每条消息在一天中每小时的分布情况。您可以通过查找时间然后使用冒号再次拆分字符串来从“从”行中提取小时。 “来自 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 `

文本文件可以在这里找到http://www.pythonlearn.com/code/mbox-short.txt 调试时,我意识到我的编译器多次遍历每一行以返回每小时的值,这太高了。我确信语法 line.startswith("From ") 仅用于读取预期的行是正确的,因为我在之前的作业中使用过。

我怎样才能得到正确的几个小时的频率?

【问题讨论】:

  • 如果你显示你的实际输出会有所帮助。
  • 这是一个混合制表符和空格的问题。 Python 不会以与您相同的方式看到您的缩进。在编辑器中打开“显示空白”以查看问题;您的编辑器可能还具有“将制表符转换为空格”功能来修复它。使用 -tt 标志运行 Python 可以帮助捕获这些错误。
  • 谢谢,这似乎是一个缩进错误。在我的编辑器中打开该选项对于编写代码非常有用。谢谢!
  • 在 python 中成长的小提示:阅读集合; collections.defaultdict 是我的首选,但我认为还有一个专门为您的用例设计的(计数器?)...具体来说,您可以执行 counts[hour] += 1 而不必担心 counts 是否将小时作为键,如果计数是例如默认字典(int)

标签: python text-files raw-input


【解决方案1】:

我试过了,你的代码运行良好。

对于输出,字典是未排序的。 您可以使用 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])

输出是

04 3
06 1
07 1
09 2
10 3
11 6
14 1
15 2
16 4
17 2
18 1
19 1

【讨论】:

    猜你喜欢
    • 2019-02-01
    • 2019-10-05
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多