Вы должны использовать набор для содержимого старого файла, потому что проверка включения имеет временную сложность O (1) вместо O (n). Наборы неупорядочены, но для строк из старого файла (в отличие от строк из нового файла) порядок не имеет значения, потому что вы используете их только для тестирования включения.
Также это может помочь избежать чтения весь новый файл в память. Это не изменит временную сложность, но уменьшит объем памяти.
with open('old.txt', 'r') as oldfile:
usedfile = set(x.strip('\n') for x in oldfile)
with open('new.txt', 'r') as newfile, open('uniq.txt', 'w+') as Newdata:
for line in newfile:
l = line.strip('\n')
if l not in usedfile:
Newdata.write(l + '\n')
Обратите внимание, что выражение для usedfile
использует генератор - нет необходимости создавать временный список для создания set.
Отдельно от оптимизации, вы также можете sh заменить strip('\n')
на strip()
в двух местах, где это происходит, чтобы любые другие пробелы в начале / конце строк были также удалены, не только символы новой строки.