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



我想做的是从文件中读取,然后对于每个单词,将其与其出现次数一起附加到字典中。

例:

"今天是星期天,明天不是星期天。

然后我的字典将是这样的:{'今天'

: 1, 'is': 2, '星期日': 2, '明天': 1, 'not': 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}。 有什么帮助吗?我不知道从这里去哪里,我对这一切都很陌生。

您正在寻找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() 生成器表达式。

请注意,您的示例仅适用于第一行,我认为这不是故意的,并且此解决方案适用于整个文件(显然将其交换为微不足道)。

这是一个不处理标点符号的简单版本

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

试试这个

 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

你使用的是 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)

但是你会得到元组列表。您应该很容易将元组列表转换为字典。

相关内容

  • 没有找到相关文章

最新更新