Как печатать строки с определенными строками в python?

#python-3.x

#python-3.x

Вопрос:

Я пытаюсь напечатать строки с определенной строкой в строке. Например, в текстовом файле, если в файле есть «В текстовом файле есть 5 строк», тогда он должен искать «В строке 1», «В строке 3», «В строке 5» и печатать все эти строки.

 There are 5 lines in a text file
In line1,
In line2,
In line3,
In line4,
In line5,
 

ожидаемый результат

 There are 5 lines in a text file, In line1, In line3, In line5,
 

Пока я могу напечатать строку с определенной строкой.

 with open ('input.txt', 'r') as f:
     for line in :
        if 'There are 5 lines in a text' in line:
            print (line)
 

При этом я могу печатать только первую строку. Как мы печатаем все эти строки вместе, используя python? Любая помощь будет оценена. Заранее спасибо.

Комментарии:

1. опубликуйте код, который вы пробовали до сих пор?

2. Это всегда пять строк или их можно изменить?

3. @ThilinaLakshan Это изменится. Это всего лишь часть файла, который я пытаюсь распечатать. Он должен искать «В текстовом файле есть 5 строк», если он существует, тогда он должен искать строки.

4. 'There are 5 lines in a text' Всегда ли строка является первой строкой или это может быть случайный номер строки в файле?

5. @JoeFerndz Это может быть случайным. Это всего лишь часть файла.

Ответ №1:

Теперь, когда я понял постановку задачи, вот код для этого.

 found = False
in_line = ['In line1', 'In line3', 'In line5'] 
with open ('abc.txt', 'r') as f:
     for line in f:
        if 'There are 5 lines in a text' in line:
            print (line.strip())
            found = True
        if found and any(x in line for x in in_line):
            print (line.strip())
 

Если исходный файл :

 There are 5 lines in a text file
In line1,
In line2,
In line3,
In line4,
In line5,
 

Тогда вывод будет:

 There are 5 lines in a text file
In line1,
In line3,
In line5,
 

Если исходный файл:

 In line1,
In line2,
In line3,
There are 5 lines in a text file
In line4,
In line5,
 

Тогда вывод будет:

 There are 5 lines in a text file
In line5,
 

Я бы рекомендовал вам обновить вопрос со всей информацией, которой вы поделились в разделе комментариев.

Ответ №2:

Вы можете использовать регулярное выражение для извлечения числа из предложения,

 import re


# If txt match with specific format it extract the value from the sentence and return it
# otherwise return 0
def readDefinition(txt):
    match = re.search("^There are (d ) lines in a text file$", txt)
    if match:
        return int(match.group(1))
    return 0

with open("input.txt") as file:
    lines = file.read().split('n')
    
    i = 0
    while len(lines) > i:
        count = readDefinition(lines[i]) # try to match and extract value
        if count > 0:
            print(lines[i], ":", *lines[i 1 : i count 1]) # print result
            i  = count   1
        else:
            i  = 1
 

Если вы ищете поиск по следующей строке,
Вы можете выполнить поиск внутри lines[i 1 : i count 1]

Например, если ваш input.txt выглядит так,

 There are 5 lines in a text file
In line1,
In line2,
In line3,
In line4,
In line5,
extra

There are 3 lines in a text file
In line1,
In line2,
In line3,
extra
extra
 

Вывод будет,

 There are 5 lines in a text file : In line1, In line2, In line3, In line4, In line5,
There are 3 lines in a text file : In line1, In line2, In line3,