Вам просто нужно напечатать пустую строку, когда вы найдете данные, которые находятся в наборе exclude
.
import fileinput
# small file2
with open('file2.txt') as fin:
exclude = set(line.rstrip() for line in fin)
# big file1
for line in fileinput.input('file1.txt', inplace=True):
if line.rstrip() not in exclude:
print(line, end='')
else:
print('')
Если file1.txt:
54545
1313
23232
13551
И file2.txt:
1313
13551
После запуска сценария перед file1.txt становится:
54545
23232
Небольшое замечание по эффективности
Как вы сказали,этот код фактически переписывает все строки, отредактированные и нет.Удалить и переписать только несколько строк в середине файла непросто, и в любом случае я не уверен, что это будет более эффективно в вашем случае, так как вы не знаете a priori , какие строки должны бытьотредактировано: вам всегда нужно будет читать и обрабатывать весь файл построчно, чтобы узнать, какие строки нужно отредактировать.Насколько я знаю, вы вряд ли найдете решение, действительно более эффективное, чем это.Рад, что отрицают, если кто-нибудь знает, как.