Как найти в файле повторы
Не могу никак реализовать программу, что ищет в файле txt повторы слов и убирает их. Пытаюсь реализовать на языке Python. Алгоритм работы:
- Пользователь вводит путь до файла.
- Программа ищет копии слов.
- Сохраняет перезаписанный файл.
Подскажите пожалуйста как это можно реализовать. Заранее буду очень благодарен.
Ответы (2 шт):
# Открываем файл
with open("myfile.txt", "r") as r:
txt = r.read().split(" ") # читаем из файла и разбиваем на слова
result = ""
for i in txt: # Для каждого слова в txt
if i not in result:
result += i + " "
# Пишем в файл
with open("res.txt", "w") as f:
f.write(result)
Пример не совершенен, так как полностью решить задачу нелегко. Надо удалять слова, а что делать с пробелами между ними? Или знаками препинания? Или переводами строк?
Переводы строк сохраняются, так как мы читаем и пишем файлы построчно. Пробелами внутри строк придётся пожертвовать. Между любыми двумя словами пробел будет, а пробелы вначале и в конце строк пропадут. Также длинные последовательности пробелов заменятся на одиночные. Знаки препинания приклеиваем к словам.
Обработка по строка позволит не занимать память под лишние тексты. Уже известные слова храняться в set: быстрый поиск и обновление.
Программа:
in_file = input('Входной файл: ')
out_file = input('Выходной файл: ')
words = set()
with open(in_file) as in_f:
with open(out_file, 'w') as out_f:
for line in in_f:
out_words = []
for word in line.split():
if word not in words:
words.add(word)
out_words.append(word)
print(' '.join(out_words), file=out_f)
Запускаем её на самой себе:
$ python remove_duplicates.py
Входной файл: remove_duplicates.py
Выходной файл: output.txt
Результат:
in_file = input('Входной файл: ')
out_file input('Выходной
words set()
with open(in_file) as in_f:
open(out_file, 'w') out_f:
for line in
out_words []
word line.split():
if not words:
words.add(word)
out_words.append(word)
print(' '.join(out_words), file=out_f)