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

时间:2017-06-11 04:04:00

标签: python for-loop word-count

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

错误如下:

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'未定义

进程以退出代码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 个答案:

答案 0 :(得分:1)

如代码所示,您有三个明显的错误(尽管可能有更多错误)。

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

    for **filename** in glob.glob(os.path.join(path, '*.txt')):
        ...
        for word in **file**.read.split():
            ...
    
  2. 在for循环的每次迭代中,wordcount字典会重新初始化(并因此被删除)。您可以根据您的目标来解决这两种方式:

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

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

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

    for word in wordcount:
        print('{word}:\t{count}'.format(word=word, count=wordcount[word]))
    
  4. 我还建议使用默认字典(请参阅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]))