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

时间:2013-02-04 03:52:50

标签: python file dictionary

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

示例:

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

我的字典就是这样: {'今天':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}。任何帮助?我不知道从哪里开始,我是所有这一切的新手。

4 个答案:

答案 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