其實r 是隻讀,只能讀不能寫,這是很明確的,可是r+是可讀寫,變成r+後還沒太明白到底加了什麼,仍是照樣寫不了,有沒有這樣的體驗呢,以下代碼,只讀時python
f = open("test.txt", 'r', encoding="utf-8") # 文件句柄 f.write("we are heros\n") data = f.read() print(data, type(data)) f.close()
PS:遇到問題沒人解答?須要Python學習資料?能夠加點擊下方連接自行獲取
note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76學習
這樣的話報錯是明顯的:io.UnsupportedOperation: not writable,不可寫應都能理解,可是變成r+呢指針
f = open("test.txt", 'r+', encoding="utf-8") # 文件句柄 f.write("we are heros\n") data = f.read() print(data, type(data)) f.close()
你試過會發現,什麼也沒打印出來,同時注意!!!也沒有報錯。究竟是什麼意思呢?code
實際上是因爲讀寫機制的問題,當一個文件被讀或者寫一次後,文件中類指針的東西指向的是整個文件的末尾,再次讀時從末尾開始讀的話確定是什麼都utf-8
讀不到了,因此會出現這樣的問題,和連續f.read()兩次的話,第二次什麼都不會讀到的緣由是相同的。那如何寫完了接着讀呢,見代碼文檔
f = open("test.txt", 'r+', 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,具體緣由還得請大俠給講講。it
r+與w+啥區別呢,不能簡單的理解爲讀寫均可,細節之處略有不一樣!io
r+:先讀後寫的話是在原有文本後添加, 由於讀完後類指針已經在最末尾了,若是是先寫後讀的話,是從頭開始覆蓋式寫(如只修改了前面的字符,後面字符是不會被刪掉的),類指針停留在寫完的末尾,不是文檔末尾,能夠讀出未被覆蓋寫的部分;table
w+:爲先寫後讀,先寫完後使用f.seek(0)回到初始位置而後開始讀,若是先讀的話是讀不出任何東西的,由於w+也是純粹的覆蓋寫,在未使用寫操做前文檔是徹底空白的,不管以前該文件裏有什麼。so ,只能先寫後讀。學習資料
r和w的區別,r必須已經存在這個文件了而 w時文件能夠有也能夠沒有,if有被覆蓋,else沒有則建立一個(慎用),r+的寫也是覆蓋的!