Мой подход заключается в следующем: прочитайте второй файл, преобразуйте его в нижний регистр, а затем создайте список слов, которые он содержит. Затем преобразуйте этот список в set , чтобы повысить производительность при работе с большими файлами.
Затем просмотрите каждую строку в первом файле, и если она (также преобразованная в строчные буквы и с удаленными лишними пробелами) не входит в созданный нами набор, запишите ее в третий файл.
with open("second.txt") as second_file:
second_values = set(second_file.read().lower().split())
with open("first.txt") as first_file:
with open("third.txt", "wt") as third_file:
for line in first_file:
if line.lower().strip() not in second_values:
third_file.write(line + "\n")
set-объекты - это простой тип контейнера, который неупорядочен и не может содержать повторяющихся значений. Он предназначен для того, чтобы вы могли быстро добавлять или удалять предметы или сообщать, находится ли предмет в наборе.
Операторы
with
- это удобный способ обеспечить закрытие файла, даже если возникает исключение. Они включены по умолчанию начиная с Python 2.6 и выше, в Python 2.5 они требуют, чтобы вы поместили строку from __future__ import with_statements
вверху файла.
Оператор in
делает то, на что это похоже: сообщает, можно ли найти значение в коллекции. При использовании со списком он просто перебирает, как это делает ваш код, но при использовании с заданным объектом он использует хеши для гораздо более быстрой работы. not in
делает наоборот. (Возможная путаница: in
также используется при определении цикла for
(for x in [1, 2, 3]
), но это не связано.)