如何在fileinput中使用“ for line”迭代到嵌套循环内文件的下一行?

时间:2019-01-02 14:48:10

标签: python python-3.x file-io

为简化示例,我消除了一些嵌套循环。

我正在使用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 :(得分:3)

next iterator 作为其参数。

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以及从中读取,但是您必须使用printfile.write显式写入文件。)