首页 > 解决方案 > 在 Python 3 中找到特定行后如何跳过 n 行?

问题描述

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

原始文件:

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”for 循环。我还尝试了“next(f )”而不是“继续”,并收到 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 行)。

任何建议表示赞赏。谢谢您的帮助。

标签: python

解决方案


您可以使用next(),即:

with open("old.txt") as f, open("new.txt", "w") as w:
  for line in f:
    if "keyword" in line:
      next(f), next(f)
      continue
    w.write(line)

演示


如果您更喜欢列表推导,您还可以使用:

with open("old.txt") as f, open("new.txt", "w") as w:
  [w.write(line) if not "keyword" in line else [next(f) for _ in range(2)] for line in f]

演示


推荐阅读