Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 2.7 计算一组字符串出现的次数,并在python 2.7中打印字符串和出现次数_Python 2.7_Counter - Fatal编程技术网

Python 2.7 计算一组字符串出现的次数,并在python 2.7中打印字符串和出现次数

Python 2.7 计算一组字符串出现的次数,并在python 2.7中打印字符串和出现次数,python-2.7,counter,Python 2.7,Counter,例如,我试图逐行读取文本文件,并检查一行中每组字符串的出现次数。文本文件包含以下行(各不相同) 我想得到的输出 X_0_Gui_Menu_400_Menu_System 2 times X_0_Gui_Menu_000_Menu_root 3 times X_0_Gui_Menu_300_Menu_Outputs 2 times X_0_Gui_Menu_320_Menu_Outputs_SDI 8 times 我看到一些论坛使用count,但我不知道文件中会有什么数据可以输入检查,但这

例如,我试图逐行读取文本文件,并检查一行中每组字符串的出现次数。文本文件包含以下行(各不相同)

我想得到的输出

X_0_Gui_Menu_400_Menu_System
2 times

X_0_Gui_Menu_000_Menu_root
3 times

X_0_Gui_Menu_300_Menu_Outputs
2 times

X_0_Gui_Menu_320_Menu_Outputs_SDI
8 times
我看到一些论坛使用count,但我不知道文件中会有什么数据可以输入检查,但这是完全随机的。因此,我对如何实现这一点感到困惑。任何指导都会非常有用

file = open('test.txt')
fileLines = file.read().split('\n')
list = []

for line in fileLines :
    for tup in list:
        if tup[0] == line:
                list[list.index(tup)][1] = list[list.index(tup)][1] + 1
                break
    else:
        list.append([line, 1])

for s in list:
    print(s[0] + ' ' + str(s[1]))
这将读取文件中的行。 如果该行在列表中不存在,则会向列表中添加一个元组,该元组由字符串和计数组成。
如果行确实存在,那么它只会将1添加到相应元组中的计数。

您可以通过使用来自的计数器容器来实现这一点。从Python文档中:计数器是用于计算可散列对象的dict子类。它是一个无序集合,其中元素存储为字典键,其计数存储为字典值。计数允许为任何整数值,包括零或负计数。计数器类类似于其他语言中的bags或Multiset。”

下面是一个示例代码,可以满足您的要求。我使用文件是迭代器这一事实来创建计数器对象。当您对文件进行迭代时,它会生成每一行,但不会删除换行符,因此我使用strip()方法来获得您建议的输出

filename = 'test.txt'

filetxt = """\
X_0_Gui_Menu_400_Menu_System
X_0_Gui_Menu_400_Menu_System
X_0_Gui_Menu_000_Menu_root
X_0_Gui_Menu_000_Menu_root
X_0_Gui_Menu_000_Menu_root
X_0_Gui_Menu_300_Menu_Outputs
X_0_Gui_Menu_300_Menu_Outputs
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
"""

with open(filename, 'w') as f:
    f.write(filetxt)

from collections import Counter
with open(filename, 'r') as f:
    c = Counter(f)

# use iteritems() in python 2.7 instead of items
for key, value in c.items():
    print(key.strip())
    print('{:d} times'.format(value))

您好,我在执行此函数时出错,显示为
print(s[0]+''+s[1])TypeError:无法连接'str'和'int'对象
@VenkateshPadmanabhan是的,对不起。我没有检查我的代码。我刚刚调试过。它现在可以工作了。请尝试更新的代码。再次感谢您的回复,我尝试了更新的代码。但是它仍然不能正常工作。
我只得到字符串0 10_Gui_Menu 409)Menu System(Sensor 20_Gui)Menu()0菜单系统50 Gui菜单000菜单根14 Gui菜单300菜单输出20 Gui菜单320菜单输出SDI 23 Gui菜单310菜单输出EVF mon 10 Gui菜单312菜单输出EVF EXPTOLS 20 Gui主屏幕40 Gui主屏幕切换视图50 Gui主屏幕WB代码列表1不知道要告诉我多少.My output由字符串后跟它在文件中出现的次数组成。我认为在“test.txt”文件中,您可以将每个字符串放在同一行而不是新行上。将文件中的每个字符串移动到新行,或者在代码的第2行,将“fileLines=file.read().split('\n')替换为“fileLines=file.read().split('')”
filename = 'test.txt'

filetxt = """\
X_0_Gui_Menu_400_Menu_System
X_0_Gui_Menu_400_Menu_System
X_0_Gui_Menu_000_Menu_root
X_0_Gui_Menu_000_Menu_root
X_0_Gui_Menu_000_Menu_root
X_0_Gui_Menu_300_Menu_Outputs
X_0_Gui_Menu_300_Menu_Outputs
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
X_0_Gui_Menu_320_Menu_Outputs_SDI
"""

with open(filename, 'w') as f:
    f.write(filetxt)

from collections import Counter
with open(filename, 'r') as f:
    c = Counter(f)

# use iteritems() in python 2.7 instead of items
for key, value in c.items():
    print(key.strip())
    print('{:d} times'.format(value))