python - 在 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 行)。
任何建议表示赞赏。谢谢您的帮助。
解决方案
您可以使用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]
推荐阅读
- r - 如何处理线性回归中的缺失值?
- java - 如何将 SceneBuilder 连接到 Netbeans 11,尝试创建新的 Java ant JavaFX FXML 应用程序时出现错误
- haskell - 为什么将 LiftA2 作为方法添加到 Applicative 中?
- java - 处理 - 如何调整形状大小
- r - 多于一密度地块合二为一
- android - ClassNotFoundException Unity android 插件
- javascript - 图片上的巨大表格使移动浏览器崩溃
- c++ - C++ 类中定义的友元函数的成员访问控制
- python - PyTorch:从设备能力推断 dtype,而不是输入数据
- junit4 - 如何在 SAP Commerce 1808 中运行 JUnit5 测试