如何从文件中读取并将每个单词追加到字典?

0 投票
4 回答
2371 浏览
提问于 2025-04-17 14:39

我想做的是从一个文件中读取内容,然后对每个单词进行统计,把它们和出现的次数一起放到一个字典里。

举个例子:

'今天是星期天。明天不是星期天。'

我的字典应该是这样的: {'今天': 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()生成器表达式。)

注意,你的例子只在第一行有效,我猜这不是你想要的结果,这个解决方案是针对整个文件的(当然,调换一下也很简单)。

撰写回答