我试图逐行读取文本文件,并检查一行中每组字符串的出现次数,例如。文本文件包含这些行(有所不同)
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
我想获得
的输出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的论坛,但我不知道文件中有哪些数据可以输入要检查,但它完全是随机的。所以我很困惑如何实现这一点。任何指导都会非常有用。
答案 0 :(得分:0)
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。
答案 1 :(得分:0)
您可以使用collection module中的Counter容器来实现此目的。从Python文档:"计数器是用于计算可哈希对象的dict子类。它是一个无序集合,其中元素存储为字典键,其计数存储为字典值。计数允许为任何整数值,包括零或负计数。 Counter类与其他语言的包或多重集类似。"
以下示例代码可以满足您的要求。我使用了一个事实,即文件是创建Counter对象的迭代器。当你迭代时,在一个文件上它产生每一行,但不删除换行符,所以我使用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))