Как совершить поиск по двум файлам, игнорируя первые 10 символов

Есть код, который считывает из второго файла номера строк (STR-......) и по этим номерам ищет совпадение в первом файле и удаляет найденные.

Нужно изменить код так, чтобы номера строк (то есть первые 10 символов) игнорировались, поиск совершать по тексту, который идёт после 10 символов. Подскажите, как реализовать? Пробовал выставить [10:] - не помогло

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[:10] not in lines2:
            rezult.write(line)

Содержимое file1:

STR-111111Я вас любил: любовь еще, быть может,
STR-222222В душе моей угасла не совсем;

Содержимое file2:

STR-333333Я вас любил: любовь еще, быть может,

Результат нужен такой:

STR-222222В душе моей угасла не совсем;

Номера строк в первом и втором файле не совпадают, поэтому надо искать только по тексту, который следует после номера и до конца строки.


Ответы (1 шт):

Автор решения: txello

Вы пытаетесь сравнить последние 10 строк в каждой строке со строками в file2.txt :

lines2 = set(line.strip() for line in file2)
...
    if line[:10] not in lines2:

Но можно обрезать первые 10 строк во всех файлах и проверять их схожесть.

lines2 = set(line.strip()[10:] for line in file2)
...
    if line.strip()[10:] not in lines2:

Полный пример рабочего кода:

with open("file1.txt", "r") as file, \
     open("file2.txt", "r") as file2, \
     open("file_done.txt", "w") as rezult:
    
    lines2 = set(line.strip()[10:] for line in file2)
    
    for line in file:
        if line.strip()[10:] not in lines2:
            rezult.write(line)
→ Ссылка