Как получить следующие n строк в файле, когда строка найдена - PullRequest
0 голосов
/ 27 сентября 2019

Читая файл на python, я задавался вопросом, как получить следующие n строки, когда мы встречаем строку, соответствующую моим условиям.

Скажем, есть такой файл

mangoes:
1 2 3 4 
5 6 7 8
8 9 0 7
7 6 8 0
apples:
1 2 3 4
8 9 0 9

Теперь, когда мы находим строку, начинающуюся с манго, я хочу прочитать все следующие 4 строки.

Мне удалось выяснить, как сделать следующую немедленную строку, но не следующую n непосредственные линии

if (line.startswith("mangoes:")):
            print(next(ifile))  #where ifile is the input file being iterated over 

Ответы [ 3 ]

3 голосов
/ 27 сентября 2019

просто повторите то, что вы сделали

if (line.startswith("mangoes:")):
    for i in range(n):
        print(next(ifile)) 
1 голос
/ 27 сентября 2019

С itertools.islice особенность:

from itertools import islice

with open('yourfile') as ifile:
    n = 4
    for line in ifile:
        if line.startswith('mangoes:'):
            mango_lines = list(islice(ifile, n))

Из вашей входной выборки результирующий список mango_lines будет:

['1 2 3 4 \n', '5 6 7 8\n', '8 9 0 7\n', '7 6 8 0\n']
1 голос
/ 27 сентября 2019

Если это не огромный файл и вы не хотите читать все строки в памяти сразу, вы можете сделать что-то вроде этого

n = 4

with open(fn) as f:
    lines = f.readlines()

for idx, ln in enumerate(lines):
    if ln.startswith("mangoes"):
        break

mangoes = lines[idx:idx+n]

Это даст вам список n числастроки, включая слово mangoes.если бы вы сделали idx=idx+1, вы бы тоже пропустили заголовок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...