3216207773 发表于 2020-9-18 20:28:03

seek报错

>>> j = open('D:/python-3.8.5/文档1.txt')
>>> list(j)
['qtywuwdgwdedvedkdj']
>>> j.seek(3,2)
Traceback (most recent call last):
File "<pyshell#53>", line 1, in <module>
    j.seek(3,2)
io.UnsupportedOperation: can't do nonzero end-relative seeks
>>> j = open('D:/python-3.8.5/文档1.txt',encoding='utf-8')
>>> j.seek(4,2)
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
    j.seek(4,2)
io.UnsupportedOperation: can't do nonzero end-relative seeks
>>> j.read()
'qtywuwdgwdedvedkdj'
>>> j.seek(4,2)
Traceback (most recent call last):
File "<pyshell#57>", line 1, in <module>
    j.seek(4,2)
io.UnsupportedOperation: can't do nonzero end-relative seeks
#为什么seek()始终会报错呢,加和不加encoding=‘utf-8’都会报错

小甲鱼的铁粉 发表于 2020-9-18 20:32:26

你看,j里面只有一个元素,这个元素就是字符串,只有一个的

小甲鱼的铁粉 发表于 2020-9-18 20:34:04

['qtywuwdgwdedvedkdj']
这里有一个引号,是一个字符串,不可以用seek直接提出

sunrise085 发表于 2020-9-18 20:47:30

本帖最后由 sunrise085 于 2020-9-18 20:48 编辑

文件打开方式不对
不是以b方式打开的文件不允许从末尾seek,也就是说seek的第二个参数不允许是2
open打开的时候写成 j = open('D:/python-3.8.5/文档1.txt','rb') 试试

再者,你从文件末尾seek,第一个参数应该是负数才对啊。从末尾再向后数,还有内容吗?

3216207773 发表于 2020-9-18 21:01:56

sunrise085 发表于 2020-9-18 20:47
文件打开方式不对
不是以b方式打开的文件不允许从末尾seek,也就是说seek的第二个参数不允许是2
open打开 ...

为什么是'rb',不是‘r'?
小甲鱼那个扩展阅读
打开模式        执行操作
'r'        以只读方式打开文件(默认)
'w'        以写入的方式打开文件,会覆盖已存在的文件
'x'        如果文件已经存在,使用此模式打开将引发异常
'a'        以写入模式打开,如果文件存在,则在末尾追加写入
'b'        以二进制模式打开文件
't'        以文本模式打开(默认)
'+'        可读写模式(可添加到其他模式中使用)
'U'        通用换行符支持

sunrise085 发表于 2020-9-18 21:21:55

3216207773 发表于 2020-9-18 21:01
为什么是'rb',不是‘r'?
小甲鱼那个扩展阅读
打开模式        执行操作


这些打开方式是可以组合的
而且我在4楼说过原因了,以r打开的是不能从末尾seek的,只有以b打开的才可以从末尾seek
页: [1]
查看完整版本: seek报错