Python:如何删除重复/相似的行

我有一个包含大量消息的文件。每一行都是一条独特的消息,其结构彼此相似,稍作修改。一个例子如下:


Error number 609 at line 10

Error number 609 at line 22

Error string "foo" at line 11

Error string "bar" at line 14

并希望输出类似于:


Error number 609 at line 10

Error string "foo" at line 11

它们是“相同”类型的错误。


我设法删除了类似的行,但我遇到的问题是我必须循环遍历文件中的每一行多少次,直到它不再有“重复”。


我目前拥有的:


from difflib import SequenceMatcher


def similar(a, b):

    return SequenceMatcher(None, a, b).ratio()


lst = open("result.txt").readlines()

print(len(lst))

for i in lst:

    for index, line in enumerate(lst):

        try:

            if similar(lst[index],lst[index + 1]) > 0.8:

                lst.pop(index)

        except:

            pass


print(len(lst))

但这不是一个确定的方法,因为它可能是循环次数过多,或者如果文件非常大且包含许多“相同”行,则可能还不够。


编辑:


文件中多种消息类型之一的更准确示例是以下内容:


[{TYPE}] Timeout after {miliseconds} millis, source ref: {random-number}, system: {system}, delivered {system}: , current {system}: {time}


largeQ
浏览 303回答 2
2回答

喵喔喔

假设输入文件中的每个条目都采用以下格式...[{TYPE}] Timeout after {miliseconds} millis, source ref: {random-number}...lst = open("result.txt").readlines()pretoken = "["posttoken = "]"foundTypes = []log = []for line in lst:    foundType = ""    for letter in line:        if letter == pretoken: pass        elif letter == posttoken: break        else: foundType += letter    if foundType not in foundTypes:        foundTypes.append(foundType)        log.append(line)print(log)

慕仙森

您只需要逐行打开并读取日志文件。a=b=Nonewith open('result.txt') as infile:    if a == None:        a = infile.readline()    b = infile.readline()    while a:        a = infile.readline()        print('proc similar(a,b)')        b = a
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python