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

2024-09-29 23:18:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我使用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

谢谢


Tags: 文件importrenone示例matchline条件
1条回答
网友
1楼 · 发布于 2024-09-29 23:18:14

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

相关问题 更多 >

    热门问题