我想要做的是从文件中读取,然后对于每个单词,将其附加到字典及其出现次数。
示例:
'今天是星期天。明天不是星期天。'
我的字典就是这样: {'今天':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次,我的字典将包含{'sunday':3}而不是{'sunday':5}。任何帮助?我不知道从哪里开始,我是所有这一切的新手。
答案 0 :(得分:2)
您正在寻找collections.Counter
。
e.g:
from itertools import chain
with open("file.txt") as file:
Counter(chain.from_iterable(line.split() for line in file))
(也使用itertools.chain.from_iterable()
generator expression。)
请注意,您的示例仅适用于第一行,我认为这不是故意的,并且此解决方案适用于整个文件(显然,交换它的过程是微不足道的。)
答案 1 :(得分: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 :(得分:0)
您使用的是Python 3还是Python 2.7?
如果是,请使用收藏库中的计数器:
import re
from collections import Counter
words = re.findall('\w+', open('any_file.txt').read().lower())
Counter(words).most_common(10)
但是你得到了元组列表。您应该很容易将元组列表转换为字典。
答案 3 :(得分:0)
试试这个
file = open('any_file.txt', 'r')
myDict = {}
for line in file:
lineSplit = line.split(" ")
for x in xrange(len(lineSplit)):
if lineSplit[x] in myDict.keys(): myDict[lineSplit[x]] += 1
else: myDict[lineSplit[x]] = 1
file.close()
print myDict