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