Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.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_Readline_Python 2.6 - Fatal编程技术网

如何在Python中计算文件中的一组字符串?

如何在Python中计算文件中的一组字符串?,python,readline,python-2.6,Python,Readline,Python 2.6,我在这里查阅了一些线索,但没有一条与我的情况相符 我基本上有一个文本文件,看起来像这样: orange 0 0 0 orange 1 0 0 orange 2 0 0 orange 3 0 0 orange 4 0 0 orange 5 0 0 apple 0 0 0 apple 1 0 0 apple 2 0 0 apple 3 0 0 apple 4 0 0 apple 5 0 0 grapes 0 0 0 grapes 1 0 0 grapes 2 0 0 grapes 3 0 0 gra

我在这里查阅了一些线索,但没有一条与我的情况相符

我基本上有一个文本文件,看起来像这样:

orange 0 0 0
orange 1 0 0
orange 2 0 0
orange 3 0 0
orange 4 0 0
orange 5 0 0
apple 0 0 0
apple 1 0 0
apple 2 0 0
apple 3 0 0
apple 4 0 0
apple 5 0 0
grapes 0 0 0
grapes 1 0 0
grapes 2 0 0
grapes 3 0 0
grapes 4 0 0
grapes 5 0 0
firstTermCount: 6
secondTermCount: 6
thirdTermCount: 6
我需要做的是,能够将第一个单词作为字符串,搜索包含第一个单词的行数,然后转到下一个单词,搜索包含该单词的行数。所以结果应该是这样的:

orange 0 0 0
orange 1 0 0
orange 2 0 0
orange 3 0 0
orange 4 0 0
orange 5 0 0
apple 0 0 0
apple 1 0 0
apple 2 0 0
apple 3 0 0
apple 4 0 0
apple 5 0 0
grapes 0 0 0
grapes 1 0 0
grapes 2 0 0
grapes 3 0 0
grapes 4 0 0
grapes 5 0 0
firstTermCount: 6
secondTermCount: 6
thirdTermCount: 6
我需要有这个计数,以便在下一步中,我可以有一个命令,该命令应该在该字符串的确切行数范围内运行,以利用每个单词旁边的数字

这里的问题是,我不知道这些术语实际上将被调用,所以我不能完成我一直看到的整个“Count”或“Count_dict”技术,因为对我来说,似乎你需要一个设置好的名称才能让函数真正查找。另外,我不知道每次一个文件中会有多少行,我每次读一个文件时都必须这样做。我知道我写的例子每个都有五行,但老实说,我想读的文件类型会有随机的行数,所以我不能只说“查找5次”

谁能为这个问题提供一个解决方案,或者提供一个链接到回答这个问题的线程,我可能错过了

多谢各位

注意:如果有帮助的话,我使用的是Python v2.6.4

编辑 因此,一位用户建议我使用计数器功能,或者使用这个字典方法,但无论哪种方式,它都不能提供我需要的结果。例如,使用这个计数器方法(我使用了一个解决方法,列出:

这就是计数器方法给我的结果:

{'orange': 5, 'peaches': 6, 'apple': 4, 'grapes': 3}
我想要的是:

{'orange': 5, 'apple': 4, 'grapes': 3,'peaches': 6 }
如何按此顺序获取这些计数?

计数器是您需要的

计数器在Python2.7中是新的,所以这里有一个“手动”解决方案,保证顺序

>>> manual_dict = {}
>>> with open('foo.data', 'r') as foo:
...     lines = foo.readlines()
... 
>>> for idx,l in enumerate(lines):
...     word = l.split(" ")[0]
...     if not word in manual_dict:
...         manual_dict[word] = {'count' : 0, 'pos' : 0}
...     manual_dict[word]['count'] +=1
...     if not manual_dict[word]['pos']:
...         manual_dict[word]['pos'] = idx
... 
>>> for w,w_config in sorted(manual_dict.items(), key=lambda x: x[1]['pos']):
...   print w, w_config['count']
... 
orange 5
apple 4
grapes 3
peaches 6

我认为问题在于,你想让单词按照在文件中找到的顺序列出,再加上它们的数量。字典(和计数器,因为它只是一个花哨的字典)是无序的,因为它们的目的是快速查找

如果您不使用2.7,则collections模块具有,以及指向的链接

您可以选择实现这一点,也可以通过收集列表中的单词(以保持顺序)及其计数来做一些更简单的事情:

from __future__ import with_statement

counts = dict()
words = list()

with open('somefile.txt') as f:
   for line in f:
       if len(line.strip()):
           bits = line.split(' ')
           if bits[0] not in words:
               words.append(bits[0])
               counts[bits[0]] = 1
           else:
               counts[bits[0]] += 1

for word in words:
    print 'Word: %s\tCount:%s' % (word, counts[word])

不遵循你的问题。为什么firstTermCount不是6?你是否忽略了第一次读取?对我来说,每个单词都维护一个计数器看起来很简单。我缺少什么?使用
计数器
正是你想要的。为什么你认为你需要提前知道单词?谢谢你,是的,我算错了,在这种情况下应该是6,但这是真的lly不是我问题的重点。我将如何使用这个“计数器”功能?我看到的每个线程(例如这个[链接]它似乎总是需要一些东西来寻找,但在我的情况下,我不知道我在寻找什么,我只知道会有很多不同的词出现…谢谢你的回答,我真的不认为它实际上是那么简单。但现在我忘了问一个问题,现在有没有一种方法来计算所有这些数字,并把它们放在t将帽子放入列表中,使结果变成[6,6,6]…?c.values()将返回所有计数器的值(如dict)。您可以对它们求和[sum(c.values())]或执行您想执行的操作,因此我尝试了此操作,但它给了我一个错误,即计数器未定义。我使用dir()检查了“collections”模块中包含的内容命令,这就是它给我的:
['Callable','Container','Hashable','ItemsView','Iterable','Iterator','KeyView','MappingView','MutableMapping','MutableSequence','Sequence','Set','Size','ValuesView','Uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuque','namedtuple']
我该怎么办…?计数器在python 2.7中是新功能。请参阅我上次编辑的不带计数器的内容。我发现这项工作可以解决计数器的问题,但不管怎样,您的两种方法都会在较长的列表中给我带来麻烦。当我在一个每个术语最多261行的文件上尝试时,它会以一种非常奇怪/随机的顺序从19、72、19、19、19和19吐出计数41,它甚至没有按字母顺序列出。当创建这些计数的列表时,我需要数字与文件中列出的术语的顺序相对应。可以这样做吗?