Как удалить все строки-дубликаты из txt файла?

в общем, надо удалить все строки-дубликаты из txt файла и записать его в новый, регистр важен, то есть если есть две строки: GL и gL, то gL является дубликатом
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 2
@vabka
Токсичный
Прочитать файл, поместить строки в список, удалить из списка дубликаты, записать строки из списка в файл.

UPD: можно использовать OrderedDict для быстрого поиска дубликатов без потери порядка следования
from collections import OrderedDict

lines = ["GL", "gL", "aa", "bb"]
print("Before:")
print(lines)

unique_lines = OrderedDict()
for line in lines:
    normalized_line = line.capitalize()
    if (normalized_line not in unique_lines.keys()):
        unique_lines[normalized_line] = line

print("\nAfter:")
print(unique_lines.values())

В моём варианте оригинальной строкой будет считаться первая попавшаяся, а сравниваться строки будут без учёта регистра
Ответ написан
@cgamadeus
Зависит от размера файла. Если строк не очень много и они поместятся в оперативу то всё можно релать в 3 строки

lines = open(file_path).read().split('\n')
unique_lines = list(set([x.lower() for x in lines]))
open(file_path2, 'w').write('\n'.join(unique_lines))


В этом случае в новый файл сохранятся все строки в нижнем регистре.
Если надо сохранить регистр первой найденной комбинации то можно сделать хитрей

from fnmatch import fnmatch
lines = [line.strip() for line in open(file_path).readlines()]
unique_lines = []
[unique_lines.append(item) for item in lines if not any([fnmatch(item, x) for x in unique_lines])]
open(file_path2, 'w').write('\n'.join(unique_lines))


Если файл весит гигобайты или строки километровые, то придется делать еще хитрей, через временное хранилище, хеши или еще как-то. В условии задачи про это ничего нет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы