使用 Python,如何比较多个字符串(在一个文件中)是否相等?

Using Python, how do I compare many strings (in one file) on equality?

提问人:maxi 提问时间:10/12/2023 最后编辑:Scott Huntermaxi 更新时间:10/12/2023 访问量:63

问:

在 .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

对于任何指导性信息,我将不胜感激。谢谢

Python 文本 分面

评论


答:

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
非常感谢,非常感谢!