使用 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)
就代码而言,您有三个明显的错误(尽管可能更多)。
您有一个 for
循环,您可以在其中更改迭代器的名称
for **filename** in glob.glob(os.path.join(path, '*.txt')):
...
for word in **file**.read.split():
...
wordcount
字典在 for 循环的每次迭代中都会重新初始化(并因此被删除)。您可以通过两种方式解决此问题,具体取决于您要达到的目标:
一个。将行 wordcount={}
移动到开始 for
循环之前,以防止在每个文件后清除字典。这将为您提供所有文件的总数 wordcount
。
b。在循环的每次迭代后将 wordcount
附加到另一个字典 files
,这样你就有了一个字典,其中键是文件名,值是包含你的字数的字典。这可能有点令人困惑,因为您现在有一个字典的字典。引用单个字数变为 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]))
我想获取文件夹中所有文件中每个文件的词频。 但是,它没有用。
错误如下:
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)
就代码而言,您有三个明显的错误(尽管可能更多)。
您有一个
for
循环,您可以在其中更改迭代器的名称for **filename** in glob.glob(os.path.join(path, '*.txt')): ... for word in **file**.read.split(): ...
wordcount
字典在 for 循环的每次迭代中都会重新初始化(并因此被删除)。您可以通过两种方式解决此问题,具体取决于您要达到的目标:一个。将行
wordcount={}
移动到开始for
循环之前,以防止在每个文件后清除字典。这将为您提供所有文件的总数wordcount
。b。在循环的每次迭代后将
wordcount
附加到另一个字典files
,这样你就有了一个字典,其中键是文件名,值是包含你的字数的字典。这可能有点令人困惑,因为您现在有一个字典的字典。引用单个字数变为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]))