У меня есть один файл с большим количеством сообщений.Каждая строка представляет собой уникальное сообщение, которое будет структурировано похоже друг на друга с небольшой модификацией.Примером может быть следующий:
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}