Удаление дубликатов в txt
задача такая: у меня есть .txt файл со ссылками. Каждый раз при запуске кода он парсит сайт и добавляет новые ссылки, но иногда попадаются уже использованные. Мне необходимо удалять все дублирующиеся ссылки + удалять их уникальные копии. К примеру: мне нужно изменить .txt со ссылками
abc.ru
bac.ru
abc.ru
на выходе .txt файл должен содержать
bac.ru
Ответы (3 шт):
Можно сделать через конвертацию в список, который потом фильтруем по количеству упоминаний. Если имеем число отличное от единицы, то не включаем в новый список. Дальше join() в одну строку.
with open('www.txt') as file:
rows = [row.strip() for row in file]
filtered = [r for r in set(rows) if r and rows.count(r) == 1]
filtered_string = '\n'.join(filtered)
Еще такой вариант в голову пришел после варианта eri с Counter:
with open('w.txt') as file:
rows = [row.strip() for row in file]
d = dict().fromkeys(rows, -1)
for r in rows:
d[r] += 1
filtered = [k for k, v in d.items() if not v]
На выходе:
bac.ru
www.ru
[e[0] for e in filter(
lambda x: x[1]==1,
collections.Counter(
open('www.txt').readlines()
).most_common())
]
Такое решение
with open(".txt") as file:
t_file = file.readlines()
t_set = set(t_file)
result = [i for i in t_set if t_file.count(i) == 1]
with open(".txt", "w") as file:
file.write("\n".join(result))
Файл полностью перезаписывается новым содержимым, который исключает все дублирующие ссылки