如何开始在特定行迭代文件?

Jo *_* Ko 2 python iteration for-loop file seek

我正在迭代文件的行enumerate(),有时需要在特定的文件行开始迭代,所以我尝试了testfile.seek(),例如,如果我想在第10行再次开始迭代文件,那么testfile.seek(10):

test_file.seek(10)

for i, line in enumerate(test_file):
    …
Run Code Online (Sandbox Code Playgroud)

然而,test_file始终保持从第一行开始迭代0.我可能做错了什么?为什么不seek()工作?任何更好的实现也将受到赞赏.

提前谢谢你,一定会upvote /接受答复

ale*_*xis 6

普通文件是文件系统级别的字符序列,就Python而言; 跳转到特定线路没有低级别的方法.该seek()命令以字节为单位计算偏移量,而不是行数.(原则上,只有在文件以二进制模式打开时才应使用显式搜索偏移.在文本文件上查找是"未定义的行为",因为逻辑字符可能需要多个字节.)

如果您想跳过多行,唯一的选择是阅读并丢弃它们.由于迭代文件对象一次只能获取一行,因此使代码工作的紧凑方法是itertools.islice():

from itertools import islice

skipped = islice(test_file, 10, None)  # Skip 10 lines, i.e. start at index 10
for i, line in enumerate(skipped, 11):
    print(i, line, end="")
    ...
Run Code Online (Sandbox Code Playgroud)