Как ускорить скрипт на Python, который удаляет строки в файле, используя список
Подскажите, как можно ускорить скрипт. Суть его такая:
Есть два файла - file1.txt и file2.txt. Из первого файла удаляются строки, номера которых есть во втором файле.
Кусок из file1.txt:
STR-227313Я вас любил: любовь еще, быть может,
STR-227314В душе моей угасла не совсем;
STR-227315Но пусть она вас больше не тревожит;
STR-227316Я не хочу печалить вас ничем.
STR-227317Я помню чудное мгновенье:
STR-227318Передо мной явилась ты,
STR-227412Я вас любил безмолвно, безнадежно,
STR-227415То робостью, то ревностью томим;
STR-227417Я вас любил так искренно, так нежно,
STR-227418Как мимолетное виденье,
STR-227419Как дай вам бог любимой быть другим.
Кусок из file2.txt:
STR-227317
STR-227318
STR-227418
Результат:
STR-227313Я вас любил: любовь еще, быть может,
STR-227314В душе моей угасла не совсем;
STR-227315Но пусть она вас больше не тревожит;
STR-227316Я не хочу печалить вас ничем.
STR-227412Я вас любил безмолвно, безнадежно,
STR-227415То робостью, то ревностью томим;
STR-227417Я вас любил так искренно, так нежно,
STR-227419Как дай вам бог любимой быть другим.
Мой код:
with open("file1.txt", "r") as file,
open("file2.txt", "r") as file2,
open("file_done.txt", "w") as rezult:
content1 = file.read()
content2 = file2.read()
lines1 = content1.splitlines()
lines2 = content2.splitlines()
i = 0
rez = []
while i < len(lines1):
key = True
for j in range(len(lines2)):
if lines2[j] in lines1[i]:
key = False
i += 1
break
if key:
rez.append(lines1[i])
i += 1
rezult.write('\n'.join(rez))
Ответы (1 шт):
Автор решения: Виталий
→ Ссылка
Можно попробовать использовать множества для хранения строк вместо списка.
with open("file1.txt", "r") as file, \
open("file2.txt", "r") as file2, \
open("file_done.txt", "w") as rezult:
lines2 = set(line.strip() for line in file2)
for line in file:
if line[:9] not in lines2:
rezult.write(line)
Здесь мы используем оператор [:9] для того, чтобы получить первые 9 символов строки, что эквивалентно номеру строки в file2.txt.