Поиск строк для копирования по нескольким условиям

При назначении переменной диапазона чисел и использовании её в поиске нужных строк для копирования никакая строка не выписывается.

Нужен был скрипт для обработки лога с выписыванием необходимых трёх строк. Возникла проблема в том, что для выбора этой строка необходимо, чтобы выполнялось условие наличия переменной плюс диапазон чисел. Первая переменная содержит в себе текст. И ещё вопрос: как можно сделать так, что если не выполняются условия третьей строки, то две выше не выписываются?

Пример первой переменой:

Золото:_ + диапазон чисел от 1000 до 10000

(фактически мне необходимо при выполнении условия одной строки вместе с ней выписать две выше)

import os
os.system('cls' if os.name == 'nt' else 'clear') 
#select source file
a = open(input("Введите путь до файла обработки: "), "r")
#select destination file
b = open(input("Введите путь до файла записи: "), "w")       
#переменная для проверки
copy = input("1:")
copy1 = input("2:")
copy2 = input("3:")
i = [1000, 10000]
x = range(1000, 10000)
p = copy2 + x
for line in a.readlines():
    if copy in line:
        b.write(line)
    if copy1 in line:
        b.write(line)
    if  in line:
        b.write(line)
    else:
        print("no")
    b.close
    a.close

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

Автор решения: Andrey Maslov

если я правильно понял задачу у тебя в первой строке находится условие 1 во второй строке условие 2 в третьей строке условие 3 и нужно выписывать те три строки у которых совпадают все три условия?

last_3_lines = []

for line in a.readlines():
    if len(last_3_lines ) == 3: # если уже есть 3 строки в найденном списке удаляем первую и начинаем новую проверку
        last_3_lines.pop(0)
    last_3_lines.append(line)
    if all(len(last_3_lines) == 3, last_3_lines[0] == copy, last_3_lines[1] == copy1, last_3_lines[2] == copy2):
        b.write(line)
        last_3_lines = [] # это на случай, если все условия будут равны между собой и одна строка попадала в вывод только однажды

# не забыть вынести закрытие файлов на окончание программы, а не делать это в цикле
b.close
a.close
→ Ссылка