我們前面說在用open功能打開文件,完成讀寫之后,一定要回收操作系統(tǒng)資源,但肯定還是會有人讀寫文件完了之后就忘記了回收操作系統(tǒng)資源。
針對初學者,python也給我們提供了這種傻瓜式的操作文件的方式。用這種方式發(fā)開文件,你就不用再寫那個f.close()了。
它會自動幫你去回收操作系統(tǒng)資源,這就是我們的with語法。也稱之為上下文管理器。
with open('date/a.txt', mode='rt', encoding='utf-8')
這里的open功能就會得到一個文件對象,然后賦值給變量f,但是用了with語法之后,就不能在最后寫等號,要寫as f,然后冒號。
with open('date/a.txt', mode='rt', encoding='utf-8') as f:
當然,你們可以換成其他的變量名,a、b、c、d都行。
這個open功能的返回值是一個文件對象,簡單說就是用幫助我們操作文件的,我們可以通過這個文件對象,來向操作系統(tǒng)發(fā)起讀或者寫文件的請求。
還有人把這個文件對象稱之為文件句柄。其實本質(zhì)都是一樣的。
換個名字可能讓一些普通人覺得高大上一點,句柄你可能沒聽過,但你肯定聽過游戲手柄。
游戲手柄是用來控制游戲的,而文件句柄你就可以理解為文件手柄。其實也是用來控制文件的。
我們在冒號后面直接敲回車,pycharm就會幫我們自動縮進4個空格。
現(xiàn)在我們又要學習一種有子代碼塊的語法了,和前面我們學過的if判斷、for循環(huán)、while循環(huán)一樣。
你會發(fā)現(xiàn)這些語法都有一個規(guī)律,就是子代碼塊的上一行的最后都會有一個冒號,包括我們后面要學的函數(shù)、類都是這樣。
函數(shù)和類后面都會陸續(xù)講到。
接著在這個子代碼塊里面,我們就可以進行文件的讀寫操作了。
with open('date/a.txt', mode='rt', encoding='utf-8') as f:
res = f.read()
這個f.read()會讀取硬盤里的數(shù)據(jù),然后通過我們指定的這個utf-8的編碼,轉(zhuǎn)成unicode,也就是轉(zhuǎn)成了python3里面的字符串,賦值給了res。
然后打印一下res。
with open('date/a.txt', mode='rt', encoding='utf-8') as f:
res = f.read()
print(res)
前面我們沒有with語法的時候,到這里還沒有完,還需要做一步f.close來回收操作系統(tǒng)資源。
但是用了with語法之后,就不再需要來做這一步了,會主動幫我們調(diào)用f.close。
with語法還有一個用法,就是可以同時打開多個文件。我再新建一個b.txt文件,然后我再用with語法同時打開兩個txt文件。
with open('date/a.txt', mode='rt', encoding='utf-8') as f\
,open('date/b.txt', mode='rt', encoding='utf-8') as f2:
res = f.read()
print(res)
res2 = f2.read()
print(res2)
未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » Pytho with上下文管理