Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从文件中读取并将每个单词附加到词典中?_Python_File_Dictionary - Fatal编程技术网

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

Python 如何从文件中读取并将每个单词附加到词典中?,python,file,dictionary,Python,File,Dictionary,我想做的是从一个文件中读取,然后针对每个单词,将其与发生次数一起添加到字典中 例如: “今天是星期天。明天不是星期天。” 我的字典是这样的: {‘今天’:1,‘是’:2,‘星期日’:2,‘明天’:1,‘不是’:1} 我要做的是使用readline和split创建一个列表,然后将每个元素及其值附加到一个空字典中,但到目前为止它还没有真正起作用。以下是迄今为止我所掌握的信息,尽管它并不完整: file = open('any_file,txt', 'r') for line in file.rea

我想做的是从一个文件中读取,然后针对每个单词,将其与发生次数一起添加到字典中

例如:

“今天是星期天。明天不是星期天。”

我的字典是这样的: {‘今天’: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 
这样做的问题是,当我的字典在每一行被读取时更新时,单词的值不会累积。因此,如果在另一行中“sunday”出现3次,我的字典将包含{'sunday':3},而不是{'sunday':5}。有什么帮助吗?我不知道从这里到哪里去,我对这一切都是新手。

你在找什么

e、 g:

(也使用了一个。)

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

您正在寻找

e、 g:

(也使用了一个。)


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

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

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

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

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

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

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

这里有一个简单的版本,不涉及标点符号

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
试试这个

 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


这种类型的计数器无法使用
collections.Counter()
。(编辑:使用编辑功能会更好一些,尽管这是一种低效的展平iterable的方法)。收集计数器是唯一的方法吗?我认为任何其他的解决方案都是冗长乏味的though@peppy当然,这不是唯一的解决方案,但它很有效,而且工作已经为您完成。@peppy,您可以使用
dict
来完成这项工作。如果不存在密钥,只需添加密钥,然后将1添加到value@Peppy. 我使用dict添加了一个版本。还有其他方法,但我认为这一种很容易理解。这种方法违背了使用
collections.Counter()
的意义。(编辑:使用编辑功能会更好一些,尽管这是一种低效的展平iterable的方法)。收集计数器是唯一的方法吗?我认为任何其他的解决方案都是冗长乏味的though@peppy当然,这不是唯一的解决方案,但它很有效,而且工作已经为您完成。@peppy,您可以使用
dict
来完成这项工作。如果不存在密钥,只需添加密钥,然后将1添加到value@Peppy. 我使用dict添加了一个版本。还有其他方法,但我认为这一种很容易理解。这个正则表达式实际上并不需要,而且
集合
存在于2.x中。@Lattyware,对不起,我应该让自己更清楚。Python2中没有计数器。我刚刚测试过,至少在2.7中肯定有。@Lattyware,对不起,我刚刚意识到我使用了Python2.6。该计数器是在Python2.7中引入的。这个正则表达式不是真的需要,而且
集合
存在于2.x.@Lattyware中,对不起,我应该说得更清楚些。Python2中没有计数器。我刚刚测试过,至少在2.7中肯定有。@Lattyware,对不起,我刚刚意识到我使用了Python2.6。该计数器是在Python2.7中引入的。另一个问题是,如果“星期日”在一行上出现3次,那么你在做
line.count(“星期日”)
3次,这是浪费另一个问题是,如果“星期日”在一行上出现3次,那么你在做
line.count(“星期日”)
3次,这是浪费