gpt4 book ai didi

python - 使用 for 循环计算所有文件的字数

转载 作者:太空宇宙 更新时间:2023-11-03 15:07:51 25 4
gpt4 key购买 nike

我想获取文件夹中所有文件中每个文件的词频。然而,这并没有奏效。

错误如下:

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 循环的每次迭代中都会重新初始化(从而被删除)。您可以通过两种方式解决此问题,具体取决于您想要达到的目的:

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

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

关于python - 使用 for 循环计算所有文件的字数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44480257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com