Python文件讀寫w+和r+區(qū)別解析
其實r 是只讀,只能讀不能寫,這是很明確的,但是r+是可讀寫,變成r+后還沒太明白到底加了什么,還是照樣寫不了,有沒有這樣的體驗?zāi)?如下代碼,只讀時
f = open('test.txt', ’r’, encoding='utf-8') # 文件句柄f.write('we are herosn')data = f.read()print(data, type(data))f.close()
這樣的話報錯是明顯的:io.UnsupportedOperation: not writable,不可寫應(yīng)都能理解,但是變成r+呢
f = open('test.txt', ’r+’, encoding='utf-8') # 文件句柄f.write('we are herosn')data = f.read()print(data, type(data))f.close()
你試過會發(fā)現(xiàn),什么也沒打印出來,同時注意!?。∫矝]有報錯。到底是什么意思呢?
其實是由于讀寫機制的問題,當(dāng)一個文件被讀或者寫一次后,文件中類指針的東西指向的是整個文件的末尾,再次讀時從末尾開始讀的話肯定是什么都
讀不到了,所以會出現(xiàn)這樣的問題,和連續(xù)f.read()兩次的話,第二次什么都不會讀到的原因是相同的。那如何寫完了接著讀呢,見代碼
f = open('test.txt', ’r+’, encoding='utf-8') # 文件句柄 f.write('we are herosn') f.seek(0) data = f.read() print(data, type(data)) f.close()
加上f.seek(0)使得類指針的東西回到文件的開頭然后從頭開始讀即可。配合f.tell()使用,英文及字符返回的是那個類指針的位置(也就是字符個數(shù)),但是中文的話是字符 個數(shù)*3,具體原因還得請大俠給講講。
r+與w+啥區(qū)別呢,不能簡單的理解為讀寫都可,細節(jié)之處略有不同!
r+:先讀后寫的話是在原有文本后添加, 因為讀完后類指針已經(jīng)在最末尾了,如果是先寫后讀的話,是從頭開始覆蓋式寫(如只修改了前面的字符,后面字符是不會被刪掉的),類指針停留在寫完的末尾,不是文檔末尾,可以讀出未被覆蓋寫的部分; w+:為先寫后讀,先寫完后使用f.seek(0)回到初始位置然后開始讀,如果先讀的話是讀不出任何東西的,因為w+也是純粹的覆蓋寫,在未使用寫操作前文檔是完全空白的,無論之前該文件里有什么。so ,只能先寫后讀。 r和w的區(qū)別,r必須已經(jīng)存在這個文件了而 w時文件可以有也可以沒有,if有被覆蓋,else沒有則創(chuàng)建一個(慎用),r+的寫也是覆蓋的!以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. php使用正則驗證密碼字段的復(fù)雜強度原理詳細講解 原創(chuàng)2. vue前端RSA加密java后端解密的方法實現(xiàn)3. JSP+Servlet實現(xiàn)文件上傳到服務(wù)器功能4. 基于jsp+mysql實現(xiàn)在線水果銷售商城系統(tǒng)5. 基于javaweb+jsp實現(xiàn)企業(yè)財務(wù)記賬管理系統(tǒng)6. CSS可以做的幾個令你嘆為觀止的實例分享7. ASP動態(tài)網(wǎng)頁制作技術(shù)經(jīng)驗分享8. 淺談由position屬性引申的css進階討論9. ASP中實現(xiàn)字符部位類似.NET里String對象的PadLeft和PadRight函數(shù)10. 利用CSS3新特性創(chuàng)建透明邊框三角

網(wǎng)公網(wǎng)安備