1. 程式人生 > >使用seek()方法報錯:can't do nonzero end-relative seeks

使用seek()方法報錯:can't do nonzero end-relative seeks

python檔案操作中seek()方法:

語法

seek() 方法語法如下:

fileObject.seek(offset[, whence])

引數

  • offset -- 開始的偏移量,也就是代表需要移動偏移的位元組數

  • whence:可選,預設值為 0。給offset引數一個定義,表示要從哪個位置開始偏移;0代表從檔案開頭開始算起,1代表從當前位置開始算起,2代表從檔案末尾算起。

返回值

該函式沒有返回值。


在使用seek()函式時,有時候會報錯為  “io.UnsupportedOperation: can't do nonzero cur-relative seeks”,程式碼如下:

複製程式碼
>>> f=open("aaa.txt","r+")    #以讀寫的格式開啟檔案aaa.txt
>>> f.read()    #讀取檔案內容
'my name is liuxiang,i am come frome china'
>>> f.seek(3,0)       #從開頭開始偏移三個單位(偏移到“n”)
3
>>> f.seek(5,1)     #想要從上一次偏移到的位置(即“n”)再偏移5個單位
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
io.UnsupportedOperation: can't do nonzero cur-relative seeks
複製程式碼

照理說,按照seek()方法的格式file.seek(offset,whence),後面的1代表從當前位置開始算起進行偏移,那又為什麼報錯呢?

這是因為,在文字檔案中,沒有使用b模式選項開啟的檔案,只允許從檔案頭開始計算相對位置,從檔案尾計算時就會引發異常。將  f=open("aaa.txt","r+")  改成

f = open("aaa.txt","rb")   就可以了

改正後的程式碼如下圖:

>>> f = open("aaa.txt","rb")
>>> f.seek(3,0)
3
>>> f.seek(5,1)
8