我想在文件夹中的所有文件中获得每个文件的单词频率。 但是,它没有用。
C:\ Python \ Anaconda3 \ python.exe C:/Python/Anaconda3/frequency.py Traceback(最近一次调用最后一次): File" C:/Python/Anaconda3/frequency.py" ;,第6行,在 for file.read()中的单词.split(): NameError:name' file'未定义
如何有效地制作它? 谢谢。
import glob
import os
path = 'C:\Python\Anaconda3'
for filename in glob.glob(os.path.join(path, '*.txt')):
wordcount = {}
for word in file.read().split():
if word not in wordcount:
wordcount[word] = 1
else:
wordcount[word] += 1
print(word, wordcount)
答案 0 :(得分:1)
如代码所示,您有三个明显的错误(尽管可能有更多错误)。
您有一个for
循环,您可以在其中更改迭代器的名称
for **filename** in glob.glob(os.path.join(path, '*.txt')):
...
for word in **file**.read.split():
...
在for循环的每次迭代中,wordcount
字典会重新初始化(并因此被删除)。您可以根据您的目标来解决这两种方式:
一个。在开始wordcount={}
循环之前将行for
移动到以防止在每个文件之后清除字典。这将为所有文件提供总计wordcount
。
湾在循环的每次迭代之后将wordcount
附加到另一个字典files
,这样你就有了一个字典,其中键是文件名,值是包含你的wordcounts的字典。这可能有点令人困惑,因为你现在有一本字典词典。引用单个字数增加为filecounts[filename][word] = count
。
您打印字典的方法不正确,请考虑以下内容:
for word in wordcount:
print('{word}:\t{count}'.format(word=word, count=wordcount[word]))
我还建议使用默认字典(请参阅Docs,这样就无需检查字典中是否有word
,并将其设置为1
。
所以,总的来说,我会写下来:
from collections import defaultdict
import glob
import os
path = 'C:\Python\Anaconda3'
filecounts = {}
for filename in glob.glob(os.path.join(path, '*.txt')):
wordcount = defaultdict(int)
for word in filename.read().split():
wordcount[word] += 1
filecounts[filename] = wordcount
for filename in filecounts:
print('Word count for file \'{file}\''.format(file=filename))
for word in filecounts[filename]:
print('\t{word}:\t{count}'.format(word=word, count=filecounts[filename][word]))