Python 3中找到含关键词的行后如何跳过该行及后续2行?
解决方案:跳过包含关键词的行及后续两行
你遇到的问题很典型,先帮你理清原有代码的问题,再给出两种适配不同场景的可行方案:
为什么你的原有方法无效?
- 嵌套
continue的问题:你写的for i in range(3): continue仅作用于内层小循环,完全不会影响外层的for line in lines循环——外层循环还是会挨个处理每一行,相当于这个内部循环只是做了三次无用的空转。 next(f)报错的原因:因为你先执行了lines = f.readlines(),这会把文件所有内容一次性读取到内存,同时文件指针会移动到文件末尾。此时再调用next(f),迭代器已经没有内容可返回,自然会抛出StopIteration错误。
方案1:基于列表索引遍历(适合中小型文件)
既然你已经把所有行读取到了lines列表里,用索引控制跳过行数的逻辑会更直观:
with open('Original_file','r') as f: lines = f.readlines() with open('New_file', 'w') as nf: i = 0 while i < len(lines): if 'keyword' in lines[i]: # 跳过当前行 + 后续2行,总共3行,索引直接+3 i += 3 else: # 注意:readlines()读取的行已包含换行符,无需额外拼接"\n" nf.write(lines[i]) i += 1
方案2:基于文件迭代器(适合大型文本文件)
如果你的文件体积很大,把所有内容加载到内存会占用过多资源,直接迭代文件对象(本身就是迭代器)更高效,还能避免内存溢出:
with open('Original_file','r') as f, open('New_file', 'w') as nf: for line in f: if 'keyword' in line: # 手动跳过接下来的2行,用try-except处理文件末尾的边界情况 try: next(f) # 跳过第1行后续行 next(f) # 跳过第2行后续行 except StopIteration: # 如果文件剩余行数不足2行,直接终止循环 break continue # 跳过当前关键词行的写入 nf.write(line)
这个方法的优势在于:不需要把整个文件读进内存,每处理一行就丢弃一行,内存占用极低,适合GB级别的大型文件。
内容的提问来源于stack exchange,提问作者Nathalie
相关产品推荐
相关产品推荐

