在Python3中找到特定行后,如何跳过n行?

2024-09-27 04:27:34 发布

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

假设我有一个大的文本文件,我想跳过包含一些关键字的一行,以及该行之后的两行

原始文件:

line1 some words
line2 some words
line3 keyword
line4 some words
line5 some words
line6 some words
line7 some words
line8 some words

新文件:

line1 some words
line2 some words
line6 some words
line7 some words
line8 some words

我的代码的简化片段:

with open('Original_file','r') as f:
    lines = f.readlines()
    nf = open('New_file', 'w')
    for line in lines:
        if 'keyword' in line:
            for i in range(3): continue
        else:
            nf.write(line + "\n")

循环“for i in range(3):continue”不会跳过行(我假设它只是在嵌套的for循环中继续,而不是在循环的“for line in lines”中继续。我还尝试了“next(f)”而不是“continue”,并得到了StopIteration错误消息

当然,如果我尝试

with open('Original_file','r') as f:
    lines = f.readlines()
    nf = open('New_file', 'w')
    for line in lines:
        if 'keyword' in line: 
            continue
        else:
            nf.write(line + "\n")

它成功地跳过了一行,但只跳过了带有关键字的行,而我还想跳过接下来的两行(总共3行)

非常感谢您的建议。谢谢您的帮助


Tags: 文件inforlinesome关键字openkeyword
3条回答

制作一个计数器,并根据该计数器跳过行

with open('Original_file','r') as f:
    lines = f.readlines()
    nf = open('New_file', 'w')
    skip_lines = 0
    for line in lines:
        if skip_lines > 0:
            skip_lines -= 1
        elif 'keyword' in line: 
            skip_lines = 3
        else:
            nf.write(line + "\n")

您可以使用标志/计数器来实现这一点

with open('Original_file','r') as f:
    lines = f.readlines()
    skip = 0
    nf = open('New_file', 'w')
    for line in lines:
        if skip:
            skip -=1
        elif 'keyword' in line:
            skip = 3
        else:
            nf.write(line + "\n")

您可以尝试迭代索引而不是元素:

with open('Original_file','r') as f:
    lines = f.readlines()

nf = open('New_file', 'w')
i = 0
while i< len(lines):
    line = lines[i]
    if 'keyword' in line:
        i+=3
    else:
        nf.write(line + "\n")
        i+=1

相关问题 更多 >

    热门问题