with open(longfilename) as longfile, open(shortfilename) as shortfile, open(newfilename, 'w') as newfile:
newfile.writelines(line for line in shortfile if line not in set(longfile))
Это так просто. Это скопирует строки из shortfile
в newfile
без необходимости хранить их все в памяти, если они также существуют в longfile
.
Если вы работаете на Python 2.6 или старше, вам понадобится вставить оператор with:
with open(longfilename) as longfile:
with open(shortfilename) as shortfile:
with open(newfilename, 'w') as newfile:
Если вы используете Python 2.5, вам нужно:
from __future__ import with_statement
в самом верху вашего файла или просто используйте
longfile = open(longfilename)
и т.д.. и закройте каждый файл самостоятельно.
Если вам нужно манипулировать строками, явно подойдет цикл for
, важная часть - set()
. Поиск элемента в наборе происходит быстро, поиск строки в длинном списке выполняется медленно.
longlines = set(line.strip_or_whatever() for line in longfile)
for line in shortfile:
if line not in longlines:
newfile.write(line)