python中循环与while循环的文件位置

python中循环与while循环的文件位置,python,Python,为什么tell()返回不同的答案取决于它是从“for”循环还是从“while”循环中调用的?例如,以以下代码为例: tempfile = open(...,'r') print('for loop:') for line in tempfile: lineStart=tempfile.tell() print('line:'+str(lineStart)) tempfile.seek(0) print('while loop:') line=tempfile.readline()

为什么tell()返回不同的答案取决于它是从“for”循环还是从“while”循环中调用的?例如,以以下代码为例:

tempfile = open(...,'r')
print('for loop:')
for line in tempfile:
    lineStart=tempfile.tell()
    print('line:'+str(lineStart))
tempfile.seek(0)
print('while loop:')
line=tempfile.readline()
while line != '':
    lineStart=tempfile.tell()
    print('line:'+str(lineStart))
    line=tempfile.readline()
其输出为:

for loop
line:1014
line:1014
...
line:1014
line:1014
while loop
line:19
line:38
line:64
...
line:1001
line:1011
line:1014

在内部,
for line in file
使用一个预读缓冲区,这解释了为什么
.tell()
在示例中返回更高的数字

从(我的)重点:

为了使
for
循环成为在文件行上循环的最有效方式(一种非常常见的操作),方法
next()
使用隐藏的预读缓冲区。


所以我假设这意味着我无法在for循环中使用tell()和seek()在文件中重新定位(例如备份一行)?因此我需要把我所有的for循环都转换成while循环?@sagevahi:是的,我认为你的结论是正确的。这真的很不幸,但我想至少我可以停止拔头发了:)谢谢!!!tempfile.seek(0)。在…之前…你对…做了同样的事吗