如何实现每次运行程序时读取文件的每第三行?
如何每次运行程序读取文件的每第三行?
我希望每次运行程序时读取文件的特定行。假设有一个文本文件内容如下:
line 1 line 2 line 3 line 4 line 5 line 6我想要每次运行程序时读取该文件的每第三行。我尝试了以下代码:
with open("test.txt", "r+") as f: for line in f: line = f.readline() #do something with line但上述代码仅能读取第一行,无法精准读取每第三行。虽然使用enumerate可以定位到特定行,但后续逐一处理这些行存在问题,请问该如何解决?
嘿,我来帮你搞定这个问题!你之前的代码逻辑出在——for line in f已经在逐行遍历文件对象了,这时再调用f.readline()会直接跳过下一行,导致整个迭代的节奏乱掉,自然读不到正确的行。下面给你两个实用的解决办法:
方法1:用enumerate精准匹配行号
enumerate其实是个好工具,只要你搞对行号的起始计数,就能轻松定位到每第三行。我们可以让行号从1开始(更符合日常认知),然后判断行号是否是3的倍数:
with open("test.txt", "r") as f: # start=1让行号从1开始计数,对应文件里的line1、line2... for line_num, line in enumerate(f, start=1): if line_num % 3 == 0: # 这里写你要处理该行的逻辑,比如打印或解析内容 print(f"读取到第三行:{line.strip()}")
这种方法逻辑直观,而且是逐行读取,不会一次性加载整个文件到内存,小文件大文件都能轻松处理。
方法2:用itertools.islice高效跳过无关行
如果你处理的是超大文件,想追求更高的效率,可以用itertools模块里的islice,它能直接从文件迭代器里截取你需要的行,跳过不需要的内容:
from itertools import islice with open("test.txt", "r") as f: # islice(迭代器, 起始索引, 结束位置, 步长) # 我们要第3、6、9...行,对应索引2(Python从0计数),步长设为3 for line in islice(f, 2, None, 3): print(f"读取到第三行:{line.strip()}")
这个方法更高效,因为它直接跳过了前两行和中间不需要的行,不需要每次循环都做取模判断,内存占用也更低,适合处理GB级别的大文件。
之前你用enumerate可能是没处理好起始计数,或者循环里不小心多调用了读取方法,现在用上面这两种方法,就能精准读取每第三行啦!
内容的提问来源于stack exchange,提问作者Thatile
相关产品推荐
相关产品推荐

