Как найти в файле повторы

Не могу никак реализовать программу, что ищет в файле txt повторы слов и убирает их. Пытаюсь реализовать на языке Python. Алгоритм работы:

  1. Пользователь вводит путь до файла.
  2. Программа ищет копии слов.
  3. Сохраняет перезаписанный файл.

Подскажите пожалуйста как это можно реализовать. Заранее буду очень благодарен.


Ответы (2 шт):

Автор решения: Kers
# Открываем файл
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)
→ Ссылка
Автор решения: Stanislav Volodarskiy

Пример не совершенен, так как полностью решить задачу нелегко. Надо удалять слова, а что делать с пробелами между ними? Или знаками препинания? Или переводами строк?

Переводы строк сохраняются, так как мы читаем и пишем файлы построчно. Пробелами внутри строк придётся пожертвовать. Между любыми двумя словами пробел будет, а пробелы вначале и в конце строк пропадут. Также длинные последовательности пробелов заменятся на одиночные. Знаки препинания приклеиваем к словам.

Обработка по строка позволит не занимать память под лишние тексты. Уже известные слова храняться в 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)
→ Ссылка