一酷含、讀取文件拋出異常
在之前的博文里替梨,我們說到:要以讀文件的模式打開一個(gè)文件對(duì)象,使用Python內(nèi)置的open()
函數(shù)螟蝙,傳入文件名和標(biāo)示符:
f = open('test.txt', 'r')
標(biāo)示符'r'
表示讀文件橙喘。這樣,我們就成功地打開了一個(gè)文件胶逢。但是厅瞎,如果這個(gè)文件不存在,那么此時(shí)open()
函數(shù)就會(huì)拋出一個(gè)IOError
的錯(cuò)誤初坠,并且給出錯(cuò)誤碼和詳細(xì)的信息告訴我們文件不存在和簸,如下:
Traceback (most recent call last):
File "G:\pyStudy\NotepadPyTest\Test", line 1, in <module>
f = open('test.txt', 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
如果文件成功打開,那么此時(shí)就可以調(diào)用read()
方法讀取文件中的內(nèi)容碟刺。
f.read()
特別需要注意的是: 在操作文件完成之后锁保,需要調(diào)用close()
方法關(guān)閉文件。因?yàn)槲募?duì)象會(huì)占用操作系統(tǒng)的資源,并且操作系統(tǒng)同一時(shí)間能打開的文件數(shù)量也是有限的:
f.close()
二爽柒、分析解決上述問題
由于文件讀寫時(shí)有可能產(chǎn)生IOError
吴菠,一旦出錯(cuò),后面的f.close()
就不會(huì)調(diào)用浩村。所以做葵,為了保證無論是否出錯(cuò)都能正確地關(guān)閉文件,我們可以使用try ... finally
通過捕捉異常心墅、處理異常來實(shí)現(xiàn)酿矢。
如果能保證文件打開沒有異常的情況下,我們每次都這么寫怎燥,實(shí)在太繁瑣瘫筐。所以,Python引入了with
語句來自動(dòng)幫我們調(diào)用close()
方法铐姚。也就是說:文件讀取的這個(gè)操作策肝,只有在with
語句內(nèi)部才會(huì)生效,不會(huì)離開隐绵。
三之众、with open() as讀寫文件
語法:
with open(文件名, 模式) as 文件對(duì)象:
文件對(duì)象.方法()
實(shí)例:
with open('test.txt', 'r') as f:
print(f.read())
由此可見:代碼更加簡潔、優(yōu)美氢橙,并且不必調(diào)用close()
方法。
注意:with
語句不僅可以用來讀文件恬偷,還可以寫文件悍手,具體根據(jù)需求。
四袍患、File對(duì)象屬性總結(jié)
文件對(duì)象屬性 | 描 述 |
---|---|
file.closed | 表示文件已經(jīng)被關(guān)閉坦康,否則為False |
file.mode | 打開文件時(shí)使用的訪問模式 |
file.encoding | 文件所使用的編碼 |
file.name | 文件名 |
file.newlines | 未讀取到行分隔符時(shí)為None |