我有一个字典中多个文本文件的地址列表' d':
'd:/individual-articles/9.txt', 'd:/individual-articles/11.txt', 'd:/individual-articles/12.txt',...
依旧......
现在,我需要阅读字典中的每个文件,并保留整个字典中出现的每个单词出现的单词列表。
我的输出应该是以下形式:
the-500
a-78
in-56
依旧......
其中500是单词""的次数。发生在字典中的所有文件中...依此类推..
我需要为所有单词执行此操作。
我是一个python newbie..plz帮助!
我的下面的代码不起作用,它没有显示输出!我的逻辑中一定有错误,请纠正!!
import collections
import itertools
import os
from glob import glob
from collections import Counter
folderpaths='d:/individual-articles'
counter=Counter()
filepaths = glob(os.path.join(folderpaths,'*.txt'))
folderpath='d:/individual-articles/'
# i am creating my dictionary here, can be ignored
d = collections.defaultdict(list)
with open('topics.txt') as f:
for line in f:
value, *keys = line.strip().split('~')
for key in filter(None, keys):
if key=='earn':
d[key].append(folderpath+value+".txt")
for key, value in d.items() :
print(value)
word_count_dict={}
for file in d.values():
with open(file,"r") as f:
words = re.findall(r'\w+', f.read().lower())
counter = counter + Counter(words)
for word in words:
word_count_dict[word].append(counter)
for word, counts in word_count_dict.values():
print(word, counts)
答案 0 :(得分:1)
受到您使用的Counter
集合的启发:
from glob import glob
from collections import Counter
import re
folderpaths = 'd:/individual-articles'
counter = Counter()
filepaths = glob(os.path.join(folderpaths,'*.txt'))
for file in filepaths:
with open(file) as f:
words = re.findall(r'\w+', f.read().lower())
counter = counter + Counter(words)
print counter
答案 1 :(得分:0)
您的代码应在此行中出错:
word_count_dict[word][file]+= 1
由于您的word_count_dict
为空,因此当您执行word_count_dict[word][file]
时,您会收到一个关键错误,因为word_count_dict[word]
不存在,因此您可以执行[file]
它
我发现了另一个错误:
while file in d.items():
这会使文件成为元组。但是你做f = open(file,"r")
,所以你假设file
是一个字符串。这也会引发错误。
这意味着这些行都没有执行过。这反过来意味着 while file in d.items():
为空或file in filepaths:
为空。
说实话,我不明白为什么你们两个都有。我不明白你想要在那里实现什么。您已生成要解析的文件名列表。你应该迭代它们。我也不知道为什么d
是一个词典。您所需要的只是所有文件的列表。您无需在主题,列表中跟踪文件来源的时间,是吗?