一、讀取文件拋出異常
在之前的博文里,我們說到:要以讀文件的模式打開一個文件對象,使用Python內置的open()函數,傳入文件名和標示符:
f = open('test.txt', 'r')
標示符'r'表示讀文件。這樣,我們就成功地打開了一個文件。但是,如果這個文件不存在,那么此時open()函數就會拋出一個IOError的錯誤,並且給出錯誤碼和詳細的信息告訴我們文件不存在,如下:
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'
如果文件成功打開,那么此時就可以調用read()方法讀取文件中的內容。
f.read()
特別需要注意的是: 在操作文件完成之后,需要調用close()方法關閉文件。因為文件對象會占用操作系統的資源,並且操作系統同一時間能打開的文件數量也是有限的:
f.close()
二、分析解決上述問題
由於文件讀寫時有可能產生IOError,一旦出錯,后面的f.close()就不會調用。所以,為了保證無論是否出錯都能正確地關閉文件,我們可以使用try ... finally通過捕捉異常、處理異常來實現。
如果能保證文件打開沒有異常的情況下,我們每次都這么寫,實在太繁瑣。所以,Python引入了with語句來自動幫我們調用close()方法。也就是說:文件讀取的這個操作,只有在with語句內部才會生效,不會離開。
三、with open() as讀寫文件
語法:
with open(文件名, 模式) as 文件對象: 文件對象.方法()
實例:
with open('test.txt', 'r') as f: print(f.read())
由此可見:代碼更加簡潔、優美,並且不必調用close()方法。
注意:with語句不僅可以用來讀文件,還可以寫文件,具體根據需求。
四、File對象屬性總結
文件對象屬性 描述 file.closed 表示文件已經被關閉,否則為False file.mode 打開文件時使用的訪問模式 file.encoding 文件所使用的編碼 file.name 文件名 file.newlines 未讀取到行分隔符時為None
來源:https://luckylifes.blog.csdn.net/article/details/107721072