使用 for 循环的所有文件中的字数统计

word count in all files using for loop

我想获取文件夹中所有文件中每个文件的词频。 但是,它没有用。

错误如下:

C:\Python\Anaconda3\python.exe C:/Python/Anaconda3/frequency.py 追溯(最近一次通话): 文件 "C:/Python/Anaconda3/frequency.py",第 6 行,位于 对于 file.read().split() 中的单词: NameError:名称 'file' 未定义

进程已完成,退出代码为 1

我怎样才能有效地做到这一点? 谢谢。

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)

就代码而言,您有三个明显的错误(尽管可能更多)。

  1. 您有一个 for 循环,您可以在其中更改迭代器的名称

    for **filename** in glob.glob(os.path.join(path, '*.txt')):
        ...
        for word in **file**.read.split():
            ...
    
  2. wordcount 字典在 for 循环的每次迭代中都会重新初始化(并因此被删除)。您可以通过两种方式解决此问题,具体取决于您要达到的目标:

    一个。将行 wordcount={} 移动到开始 for 循环之前,以防止在每个文件后清除字典。这将为您提供所有文件的总数 wordcount

    b。在循环的每次迭代后将 wordcount 附加到另一个字典 files ,这样你就有了一个字典,其中键是文件名,值是包含你的字数的字典。这可能有点令人困惑,因为您现在有一个字典的字典。引用单个字数变为 filecounts[filename][word] = count.

  3. 您打印字典的方法不正确,请考虑以下方法:

    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]))