r、w、a我們說是只讀,只寫和追加。
現(xiàn)在我們來看+模式,它可以給r、w、a這三種模式賦予新的功能,就是讓它們可讀可寫。
我們前面說+號不能單獨使用,必須配合r、w、a,同時它也受限于r、w、a。
r+
我們先來看r+,如果文件不存在的時候會發(fā)生什么。
with open (r'G:\PythonProject\學(xué)習(xí)\學(xué)習(xí)文件\date\e.txt', mode='rt+', encoding='utf-8') as f:
pass
最后就用pass代替了,雖然r+是可讀可寫,但它會議r為準(zhǔn)。如果文件不存在我們運行看看。
直接報錯了。
現(xiàn)在我把這個文件路徑改一下,改成d.txt。這個路徑是存在的。
with open(r'G:\PythonProject\學(xué)習(xí)\學(xué)習(xí)文件\date\d.txt', mode='rt+', encoding='utf-8') as f:
res = f.read()
print(res)
這樣是沒問題的。
原來r模式是不可寫的,現(xiàn)在我在后面寫一個f.write(‘嘿嘿嘿’)。
with open(r'G:\PythonProject\學(xué)習(xí)\學(xué)習(xí)文件\date\d.txt', mode='rt+', encoding='utf-8') as f:
res = f.read()
print(res)
f.write('嘿嘿嘿')
然后我們來運行一下,看看什么情況。
嘿嘿嘿就出現(xiàn)在最后。原因就是r模式打開文件,文件指針會停在開始位置。
但是用read讀取內(nèi)容,會從文件指針當(dāng)前位置一直讀到文件末尾,就把整個文件內(nèi)容都讀出來,同時文件指針會更這跳到末尾去。
所以這個時候用write寫數(shù)據(jù)就會寫到末尾去。
現(xiàn)在我把中間的f.read注釋掉。然后再來運行。
with open(r'G:\PythonProject\學(xué)習(xí)\學(xué)習(xí)文件\date\d.txt', mode='rt+', encoding='utf-8') as f:
f.write('嘿嘿嘿')
‘嘿嘿嘿’就跑到開頭了。
同時r+還有一個效果就是它會把原來位置的內(nèi)容覆蓋掉。其實硬盤上也是一樣的,你往硬盤里寫數(shù)據(jù),硬盤里原來的數(shù)據(jù)他不會往后移動,而是會覆蓋原來的數(shù)據(jù)。
這也是為什么有的硬盤數(shù)據(jù)刪除了還可以恢復(fù),有的數(shù)據(jù)刪除了之后就恢復(fù)不了了。
如果你只是單純的刪掉文件了,并沒有在你原來的位置寫入新的數(shù)據(jù),數(shù)據(jù)就是可以恢復(fù)的,但是你已經(jīng)有新的數(shù)據(jù)覆蓋掉了,原來的數(shù)據(jù)就恢復(fù)不了了。
w+
我們接著看w+,它也是可讀可寫,但是它會以w為準(zhǔn),如果文件不存在,就會創(chuàng)建文件,如果文件存在,就會清空文件。
來驗證一下,直接把上面這個r改成w就行了。
with open(r'G:\PythonProject\學(xué)習(xí)\學(xué)習(xí)文件\date\d.txt', mode='wt+', encoding='utf-8') as f:
res = f.read()
print(res)
先看f.read,d.txt里面是有數(shù)據(jù)的,w模式只要一打開文件里的數(shù)據(jù)就肯定沒有了。
什么都沒有打印出來,再來看txt文件。
文件里面也是清空了之前的數(shù)據(jù)。
然后我在前面寫點東西吧。
with open(r'G:\PythonProject\學(xué)習(xí)\學(xué)習(xí)文件\date\d.txt', mode='wt+', encoding='utf-8') as f:
f.write('abc\n')
f.write('def\n')
res = f.read()
print(res)
這時候你覺得能讀到內(nèi)容嗎?
什么也讀不到,但是在txt文件里是有內(nèi)容的。
當(dāng)我們執(zhí)行完這個f.write之后,文件指針就已經(jīng)停在了文件末尾,所以這個時候再f.read是讀不到任何內(nèi)容的。
如果你就想讀到文件里的內(nèi)容,你要用到后面講的控制文件指針的方法了。
a+
最后a+的話就會以a為準(zhǔn),文件不存在就會創(chuàng)建文件,文件存在文件指針就會跳到末尾,所以用a+模式打開,雖然也是可讀可寫,但也是讀不到數(shù)據(jù)的。
因為文件指針在末尾,還是要控制文件指針移動才可以。
這里就不具體的演示了。
+號模式我們了解就行了,一般我們都不會用到。
未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » Python +模式