1. 程式人生 > 程式設計 >Python檔案讀寫w+和r+區別解析

Python檔案讀寫w+和r+區別解析

其實r 是隻讀,只能讀不能寫,這是很明確的,但是r+是可讀寫,變成r+後還沒太明白到底加了什麼,還是照樣寫不了,有沒有這樣的體驗呢,如下程式碼,只讀時

f = open("test.txt",'r',encoding="utf-8") # 檔案控制代碼
f.write("we are heros\n")

data = f.read()
print(data,type(data))
f.close()

這樣的話報錯是明顯的:io.UnsupportedOperation: not writable,不可寫應都能理解,但是變成r+呢

f = open("test.txt",'r+',type(data))
f.close()

你試過會發現,什麼也沒打印出來,同時注意!!!也沒有報錯。到底是什麼意思呢?

其實是由於讀寫機制的問題,當一個檔案被讀或者寫一次後,檔案中類指標的東西指向的是整個檔案的末尾,再次讀時從末尾開始讀的話肯定是什麼都

讀不到了,所以會出現這樣的問題,和連續f.read()兩次的話,第二次什麼都不會讀到的原因是相同的。那如何寫完了接著讀呢,見程式碼

 f = open("test.txt",encoding="utf-8") # 檔案控制代碼
 f.write("we are heros\n")
 f.seek(0)
 data = f.read()
 print(data,type(data))
 f.close()

加上f.seek(0)使得類指標的東西回到檔案的開頭然後從頭開始讀即可。配合f.tell()使用,英文及字元返回的是那個類指標的位置(也就是字元個數),但是中文的話是字元 個數*3,具體原因還得請大俠給講講。

r+與w+啥區別呢,不能簡單的理解為讀寫都可,細節之處略有不同!

  • r+:先讀後寫的話是在原有文字後新增,因為讀完後類指標已經在最末尾了,如果是先寫後讀的話,是從頭開始覆蓋式寫(如只修改了前面的字元,後面字元是不會被刪掉的),類指標停留在寫完的末尾,不是文件末尾,可以讀出未被覆蓋寫的部分;
  • w+:為先寫後讀,先寫完後使用f.seek(0)回到初始位置然後開始讀,如果先讀的話是讀不出任何東西的,因為w+也是純粹的覆蓋寫,在未使用寫操作前文件是完全空白的,無論之前該檔案裡有什麼。so ,只能先寫後讀。
  • r和w的區別,r必須已經存在這個檔案了而 w時檔案可以有也可以沒有,if有被覆蓋,else沒有則建立一個(慎用),r+的寫也是覆蓋的!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。