Как бы я перебрал следующую строку файла в рамках вложенного цикла, используя «for line» в fileinput? - PullRequest
0 голосов
/ 02 января 2019

Я упустил некоторые из вложенных циклов для простоты примера.

Я перебираю файл построчно, используя fileinput.Если строка соответствует определенному условию, я хочу, чтобы она заменила все будущие строки на '', пока она снова не встретит условие.

import re
import fileinput
with fileinput.FileInput("survey.qsf", inplace=True, backup='.bak') as file:
    for line in file:
        if re.match(r'l'+datamap[i][2]+'.*$',line)!=None:
            line=re.sub(r'.*$','',line)
            while re.match(r'lQID\d*$',line)==None:
                line=re.sub(r'.*$','',line)
                next(line)

Я использовал "next (line)" в качестве заполнителя, так как не могувыяснить, как перейти к следующей строке, не выходя из внутреннего цикла.

Я хочу иметь возможность выполнять итерацию по строкам, чтобы иметь:

lQID44
xyz
xyz
lQID45

вывод в виде:

[blank line]
[blank line]
[blank line]
lQID45

Спасибо.

1 Ответ

0 голосов
/ 02 января 2019

next принимает итератор в качестве аргумента.

while re.match(r'lQID\d*$',line)==None:
    line=re.sub(r'.*$','',line)
    try:
        line = next(file)  # Not next(line)
    except StopIteration:
        break

Кроме того, нет необходимости использовать re.sub для замены всей строки пустой строкой;line = '' будет достаточно.

(Кроме того, присвоение line не вносит изменений в фактический файл; inplace=True просто означает, что вы можете записать в file какчитать из него, но вы должны явно записать в файл, используя print или file.write.)

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