Как ускорить скрипт на 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.

→ Ссылка