提问人:maxi 提问时间:10/12/2023 最后编辑:Scott Huntermaxi 更新时间:10/12/2023 访问量:63
使用 Python,如何比较多个字符串(在一个文件中)是否相等?
Using Python, how do I compare many strings (in one file) on equality?
问:
在 .txt 文件中有超过 10k 条记录,每行正好是一个校验和,有时会重复。 目标是编写代码来查找 1.每个重复校验和的计数 2.以及每个重复记录的出现行数。
结果应如下所示: “4d2da647[..]”: 共计数 42 ;在第 {5,21,432,3424, 11679, [...]} 行中 .. .
我还没有太多的编码经验,我也没有要求任何人做所有的工作。但是在网上查了一下,我没有发现类似的案例,也不知道如何定位。
我从以下几点开始:
with open("file.txt", "r") as obj:
lines_list = obj.readlines
# compare lines on equality
# print out total count of duplettes and occurrences in lines
对于任何指导性信息,我将不胜感激。谢谢
答:
1赞
lvpx
10/12/2023
#1
您要做的基本上是创建一个 python 字典(键值对),键是您的校验和,count 是值。
checksum_dict = {}
for line in lines_list:
if line in checksum_dict:
checksum_dict[line] += 1
else:
checksum_dict[line] = 1
现在,您已经拥有了此字典中所有校验和的计数,并且您可以从此处轻松输出所需的信息。
在输出示例中,您还需要存储行号,因此您可以为每个校验和存储一个列表,并将行号添加到该列表中,而不是进行简单的计数。
评论
1赞
maxi
10/12/2023
谢谢。这对我有很大帮助,因为现在我很清楚如何用它自己的术语调用该过程,我可以从这里处理所需的信息输出。
0赞
Chris Charley
10/12/2023
#2
若要获取行号和行数,可以使用以下命令。这是从最大数量的重复到最少的排序。
chksums = dict()
with open("file.txt", "r") as file:
for line_num, line in enumerate(file): # here, line numbers begin with 0, not 1
#chksums.setdefault(line.strip(), []).append(line_num)
# these 5 lines do what the 1 line above does
line = line.strip()
if line in chksums:
chksums[line].append(line_num)
else:
chksums[line] = [line_num]
for line in sorted(chksums, key=lambda x: len(chksums[x]), reverse = True):
print(line, f'Total Counts: {len(chksums[line])}, ',
'line number(s)', ','.join(map(str,chksums[line])))
评论
1赞
maxi
10/12/2023
非常感谢,非常感谢!
上一个:在分面图中指定空列
下一个:弹性搜索 API 方面
评论