1

我是一个尝试构建一个简单程序的初学者程序员。它应该计算文件中的每个单词,但正如我所写的,它只计算最后一行文本。

tm = open('myfile.txt', 'r')
for line in tm:
    line = line.replace ('\n', '')
    line = line.strip()
    line = line.translate(None, '!#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~')
    line = line.lower()
    line = line.split(' ')
    list = line
dict ={}
for word in list:
    dict[word]=1
if word in dict:
    count = dict[word]
    count += 1
    dict[word] = count
else:
    dict[word]=1
for word,count in dict.iteritems():
    print word + ": " + str(count)

我的输出是这个

about: 1
to: 1
subscribe: 1
hear: 1
new: 1
our: 1
newsletter: 1
email: 1
ebooks: 2

对于 500 页的文档,任何帮助表示赞赏

4

2 回答 2

1

替换代码中的这一行:

list = line # that's not how you add elements to a list!

有了这个:

list.extend(line)

重命名变量是个好主意,因为lst它是内置的,覆盖它是个坏主意。同样的事情,你不应该把它用作变量名。listlistdict

另一个好主意:使用Counter对象来跟踪词频,这比手动更新字典的计数器值要容易得多。您创建和填充字典的整个代码块可以替换为:

from collections import Counter
d = Counter(lst) # notice the suggested variable names
于 2013-09-27T03:51:33.943 回答
0

正如 Oscar 所说,您应该将数组项添加到列表中,而不是替换它。尝试使用扩展而不是附加。

list.extend(line)

您可以一次将数组中的所有项目添加到列表中。

append 用于将单个项目添加到列表中。

于 2013-09-27T04:04:05.450 回答