文件位置在for循环中与while循环在python中

时间:2017-08-12 19:41:32

标签: python

为什么tell()会返回不同的答案,具体取决于是否从内部调用' for'循环与'而'环?例如,请使用以下代码:

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

1 个答案:

答案 0 :(得分:3)

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

来自documentation(强调我的):

  

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