4

我正在尝试使用 python 计算文本文件中单词的频率。

我正在使用以下代码:

openfile=open("total data", "r")

linecount=0
for line in openfile:
    if line.strip():
        linecount+=1

count={}

while linecount>0:
    line=openfile.readline().split()
    for word in line:
        if word in count:
            count[word]+=1
        else:
            count[word]=1
    linecount-=1

print count

但我得到一个空字典。“打印计数”将 {} 作为输出

我也尝试过使用:

from collections import defaultdict
.
.
count=defaultdict(int)
.
.
     if word in count:
          count[word]=count.get(word,0)+1

但我又得到了一本空字典。我不明白我在做什么错。有人可以指出吗?

4

3 回答 3

9

此循环for line in openfile:将文件指针移动到文件末尾。因此,如果您想再次读取数据,请将指针(openfile.seek(0))移动到文件的开头或重新打开文件。

为了更好地使用词频Collections.Counter

from collections import Counter
with open("total data", "r") as openfile:
   c = Counter()
   for line in openfile:
      words = line.split()
      c.update(words)
于 2013-07-02T13:17:03.333 回答
1

openfile.seek(0)初始化后立即添加count. 这会将读取指针放在文件的开头

于 2013-07-02T13:18:54.577 回答
1

这是一种更直接的计算文件中词频的方法:

from collections import Counter

def count_words_in_file(file_path):
    with open(file_path) as f:
        return Counter(f.read().split())

例子:

>>> count_words_in_file('C:/Python27/README.txt').most_common(10)
[('the', 395), ('to', 202), ('and', 129), ('is', 120), ('you', 111), ('a', 107), ('of', 102), ('in', 90), ('for', 84), ('Python', 69)]
于 2013-07-02T13:21:27.430 回答