获得以下代码的意外输出:
sample.txt
包含:
这是第一行 这是第二行 这是第三行 这是第四行 这是第五行 这是第六行
代码:
import sys
f1=open("sample3.txt",'r')
print f1.tell()
for line in f1:
print line
print "postion of the file pointer",f1.tell()
输出:
0
this is the first line
postion of the file pointer 141
this is the second line
postion of the file pointer 141
this is the third line
postion of the file pointer 141
this is the fourth line
postion of the file pointer 141
this is the fifth line
postion of the file pointer 141
this is the sixth line
postion of the file pointer 141
我希望显示文件指针位置的内容是每行的结尾
答案 0 :(得分:1)
我在文档中找到了相关部分:
文件对象是它自己的迭代器,例如iter(f)返回f (除非f关闭)。当文件用作迭代器时,通常在 一个for循环(例如,对于f中的行:print line.strip()),. 重复调用next()方法。此方法返回下一个输入 当文件打开时,当命中EOF时,或者引发StopIteration 用于读取(当文件打开以进行写入时,行为未定义)。 为了使for循环成为最有效的循环方式 一个文件的行(一个非常常见的操作),next()方法使用一个 隐藏的预读缓冲区。使用预读的结果 缓冲区,将next()与其他文件方法(如readline())相结合 不行。但是,使用seek()将文件重新定位到 绝对位置将刷新预读缓冲区。
答案 1 :(得分:0)
tell()
不起作用。
由于对更快读取的一些优化,一旦开始迭代,文件中的实际当前药水就没有意义。
Python 3在这里提供了更多帮助:
OSError: telling position disabled by next() call
使用readline()
效果更好:
from __future__ import print_function
f1 = open('sample3.txt')
line = f1.readline()
while line:
print(line)
print("postion of the file pointer", f1.tell() )
line = f1.readline()