如何从文件中读取并将每个单词追加到字典?
我想做的是从一个文件中读取内容,然后对每个单词进行统计,把它们和出现的次数一起放到一个字典里。
举个例子:
'今天是星期天。明天不是星期天。'
我的字典应该是这样的: {'今天': 1, '是': 2, '星期天': 2, '明天': 1, '不是': 1}
我现在的做法是用readline和split来创建一个列表,然后把每个元素和它的出现次数添加到一个空字典里,但到目前为止并没有成功。以下是我目前的代码,虽然还不完整:
file = open('any_file,txt', 'r')
for line in file.readline().split():
for i in range(len(line)):
new_dict[i] = line.count(i) # I'm getting an error here as well, saying that
return new_dict # I can't convert int to str implicitly
问题在于,当我读取每一行并更新字典时,单词的出现次数不会累加。所以如果在另一行中'星期天'出现了3次,我的字典会变成{'星期天': 3},而不是{'星期天': 5}。有没有什么帮助?我不知道接下来该怎么做,而且我对这些都很陌生。
4 个回答
0
你是用Python 3还是Python 2.7呢?
如果是的话,可以使用collections库里的Counter:
import re
from collections import Counter
words = re.findall('\w+', open('any_file.txt').read().lower())
Counter(words).most_common(10)
不过你得到的是一个元组的列表。把元组的列表转换成字典应该很简单。
1
这里有一个简单的版本,它不处理标点符号。
from collections import Counter
counter = Counter()
with open('any_file,txt', 'r') as file:
for line in file:
for word in line.split():
counter[word] += 1
也可以这样写:
from collections import Counter
counter = Counter(word for line in file for word in line.split())
这里有一种使用 dict
来解决问题的方法。
counter = {}
with open('any_file,txt', 'r') as file:
for line in file:
for word in line.split():
if word not in counter:
counter[word] = 1
else:
counter[word] += 1
2
你可以看看 collections.Counter
这个工具。
比如:
from itertools import chain
with open("file.txt") as file:
Counter(chain.from_iterable(line.split() for line in file))
(这里还可以使用 itertools.chain.from_iterable()
和 生成器表达式。)
注意,你的例子只在第一行有效,我猜这不是你想要的结果,这个解决方案是针对整个文件的(当然,调换一下也很简单)。