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 /接受答复
普通文件是文件系统级别的字符序列,就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)