新聞中心
其實(shí)r 是只讀,只能讀不能寫,這是很明確的,但是r+是可讀寫,變成r+后還沒(méi)太明白到底加了什么,還是照樣寫不了,有沒(méi)有這樣的體驗(yàn)?zāi)?如下代碼,只讀時(shí)
f = open("test.txt", 'r', encoding="utf-8") # 文件句柄
f.write("we are heros\n")
data = f.read()
print(data, type(data))
f.close()
這樣的話報(bào)錯(cuò)是明顯的:io.UnsupportedOperation: not writable,不可寫應(yīng)都能理解,但是變成r+呢
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:579817333
尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書!
'''
f = open("test.txt", 'r+', encoding="utf-8") # 文件句柄
f.write("we are heros\n")
data = f.read()
print(data, type(data))
f.close()
你試過(guò)會(huì)發(fā)現(xiàn),什么也沒(méi)打印出來(lái),同時(shí)注意!!!也沒(méi)有報(bào)錯(cuò)。到底是什么意思呢?
其實(shí)是由于讀寫機(jī)制的問(wèn)題,當(dāng)一個(gè)文件被讀或者寫一次后,文件中類指針的東西指向的是整個(gè)文件的末尾,再次讀時(shí)從末尾開(kāi)始讀的話肯定是什么都
讀不到了,所以會(huì)出現(xiàn)這樣的問(wèn)題,和連續(xù)f.read()兩次的話,第二次什么都不會(huì)讀到的原因是相同的。那如何寫完了接著讀呢,見(jiàn)代碼
'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:579817333
尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書!
'''
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)使得類指針的東西回到文件的開(kāi)頭然后從頭開(kāi)始讀即可。配合f.tell()使用,英文及字符返回的是那個(gè)類指針的位置(也就是字符個(gè)數(shù)),但是中文的話是字符 個(gè)數(shù)*3,具體原因還得請(qǐng)大俠給講講。
r+與w+啥區(qū)別呢,不能簡(jiǎn)單的理解為讀寫都可,細(xì)節(jié)之處略有不同!
r+:先讀后寫的話是在原有文本后添加, 因?yàn)樽x完后類指針已經(jīng)在最末尾了,如果是先寫后讀的話,是從頭開(kāi)始覆蓋式寫(如只修改了前面的字符,后面字符是不會(huì)被刪掉的),類指針停留在寫完的末尾,不是文檔末尾,可以讀出未被覆蓋寫的部分;
- w+:為先寫后讀,先寫完后使用f.seek(0)回到初始位置然后開(kāi)始讀,如果先讀的話是讀不出任何東西的,因?yàn)閣+也是純粹的覆蓋寫,在未使用寫操作前文檔是完全空白的,無(wú)論之前該文件里有什么。so ,只能先寫后讀。
r和w的區(qū)別,r必須已經(jīng)存在這個(gè)文件了而 w時(shí)文件可以有也可以沒(méi)有,if有被覆蓋,else沒(méi)有則創(chuàng)建一個(gè)(慎用),r+的寫也是覆蓋的!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享名稱:Python中文件讀寫之w+與r+到底有啥區(qū)別?-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://www.ef60e0e.cn/article/cshsgc.html