说明:Windows10 平台、使用pycharm进行调试
因为在读取文件的时候,指针随之运动,当读取结束的时候,指针就移动到相应的位置了,如果想再次读取文件中某个位置的数据就得移动指针。
文件f.txt
中内容如下;(该文件处于程序所属的同一个文件夹下面,如果使用的文件与程序不在同一个文件夹下,下面参数请传递文件的完整路径)
you raise me up
when i am down
please help me
lalalalala
seek的标准形式为 :seek(offset[,whence])
'''
使用seek
'''
f = open("f.txt","rb") #如果使用seek,这里必须使用rb
print(f.readline(),end = " ")
print(f.tell()) #文件名.tell() 显示当前偏移量移动指针的位置
f.seek(0) #将指针的位置偏移量置为0,相当于把位置移动到开头
print(f.tell())
print(f.readline(),end = " ")
print(f.tell())
f.seek(-5,1) #以当前位置为准,往前移动五个
print(f.readline(),end = " ")
程序运行结果:
b'you raise me up\r\n' 17
0
b'you raise me up\r\n' 17
b' up\r\n'
如果出现io.UnsupportedOperation: can't do nonzero end-relative seeks
这个错误,主要是因为在python3和python2的问题,如果该程序在Python2中是不会报错的,Python3则会报错。因为Pyhon3在文本文件中,没有使用b模式选项打开的文件,只允许从文件头开始计算相对位置,从文件尾计算时就会引发异常
在开始使用open
打开文件时候,将打开方式从r
,换成rb
即可
即:f = open("f.txt","rb") #如果使用seek,这里必须使用rb