python使用seek函数报错:io.UnsupportedOperation: can't do nonzero end-relative seeks

说明:Windows10 平台、使用pycharm进行调试

一、为什么使用seek()

因为在读取文件的时候,指针随之运动,当读取结束的时候,指针就移动到相应的位置了,如果想再次读取文件中某个位置的数据就得移动指针。


二、前言:

文件f.txt中内容如下;(该文件处于程序所属的同一个文件夹下面,如果使用的文件与程序不在同一个文件夹下,下面参数请传递文件的完整路径)

 you raise me up
 when i am down
 please help me
 lalalalala

三、seek()函数用法格式

seek的标准形式为 :seek(offset[,whence])

  • whence 默认值为0,表示从文件开头进行计算偏移量,这时候offset必须大于等于0
  • whence 如果为1,表示从当前位置开始计算偏移量,如果offence为负数,表示往前移动,为正表示往后移动
  • whence 如果为2,表示相对于文件末尾移动

四、测试代码

'''
使用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

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值