2015-04-23 138 views
1

我已经使用xlrd将Excel表单值附加到列表中。我打电话给名单a_master。我有一个带有单词的文本文件,我想计算出现在这个列表中的出现次数(我称这个文件字典和他们的每行1个单词)。下面是代码:使用Python计算出现在列表中的单词的出现次数

with open("dictionary.txt","r") as f: 
for line in f: 
    print "Count " + line + str((a_master).count(line)) 

出于某种原因,不过,伯爵回来与零存在在文本文件中的每个字计数。如果我写出来的计数这些词我自己:

print str((a_master).count("server")) 

它计算的出现没有任何的疑难问题也按顺序尝试

print line 

,看它是否是看到的话dictionary.txt文件正确,它是。

+0

你能否提供该文件的例子? – ka2m

+0

这是http://stackoverflow.com/questions/8742732/python-number-of-word-occurrences –

+0

@ tommy.carstensen的副本:不是一个确切的副本。请阅读我的答案。 – Abhijit

回答

1

从文件中读取的行以换行符结束。最后也可能有空白。这是更好地做一个查找

with open("dictionary.txt","r") as f: 
    for line in f: 
     print "Count " + line + str((a_master).count(line.strip())) 

注意理想之前去掉所有的空白,搜索列表是线性的,也有可能在大多数情况下是最佳的。我认为collections.Counter适合你所描述的情况。

重新诠释您的列表作为一本字典,其中的关键是项目和值使其通过collections.Counter是出现如下图所示

a_master = collections.Counter(a_master) 

,你可以重新编写代码为

from itertools import imap 
with open("dictionary.txt","r") as f: 
    for line in imap(str.strip, f): 
     print "Count {} {}".format(line, a_master[line]) 
+0

完美的作品,非常感谢! – Danny

+0

@丹尼:如果这回答你的问题,请考虑接受它。 – Abhijit

+0

实际上还有一个问题。为了统计列表中单词的出现次数,我将列表中的每个单词分开。但是如果我想计算“软件定义网络”的发生情况呢?我将如何去做这件事?我需要重写如何在dictionary.txt文件中出现该句子吗?我的txt文件混合了单个单词和句子。 – Danny

0

使用collections.Counter()

import re 
import collections 
words = re.findall(r'\w+', open('dictionary.txt').read().lower()) 
collections.Counter(words) 

为什么为t他的问题的方式标记xlrd?