天天看點

Python open和with open用法和差別

一、差別

使用open打開檔案,必須要使用close關閉檔案,是以,為了保證無論是否出錯都能正确地關閉檔案。

with open可以不用close()方法關閉檔案,無論在檔案使用中遇到什麼問題都能安全的退出,即使發生錯誤,退出運作時環境時也能安全退出檔案并給出報錯資訊。

二、open用法

三、with open用法

如果是配置檔案,調用readlines()最友善:

Python open和with open用法和差別
 相關參數:
Python open和with open用法和差別
 file對象的屬性:
Python open和with open用法和差別

四、打開檔案逐行讀取技巧

1.readline,優點:節省記憶體,不需要一次性把檔案内容放入記憶體中缺點:速度相對較慢

Python open和with open用法和差別

 2.readlines,一次性讀取所有行,記憶體消耗過大

Python open和with open用法和差別

 3.直接for循環

Python open和with open用法和差別

 4.read,類似readline

Python open和with open用法和差別

調用read()會一次性讀取檔案的全部内容,如果檔案有10G,記憶體就爆了,是以,要保險起見,可以反複調用read(size)方法,每次最多讀取size個位元組的内容。另外,調用readline()可以每次讀取一行内容,調用readlines()一次讀取所有内容并按行傳回list。是以,要根據需要決定怎麼調用。

如果檔案很小,read()一次性讀取最友善;如果不能确定檔案大小,反複調用read(size)比較保險;如果是配置檔案,調用readlines()最友善。

五、寫檔案

寫檔案

open()函數傳入辨別符’w’或者’wb’表示寫文本檔案或寫二進制檔案:

Python open和with open用法和差別

反複調用write()來寫入檔案,但是務必要調用f.close()來關閉檔案。寫檔案時,作業系統往往不會立刻把資料寫入磁盤,而是放到記憶體緩存起來,空閑的時候再慢慢寫入。隻有調用close()方法時,作業系統才保證把沒有寫入的資料全部寫入磁盤。忘記調用close()的後果是資料可能隻寫了一部分到磁盤,剩下的丢失了。是以,還是用with語句來得保險:

Python open和with open用法和差別

要寫入特定編碼的文本檔案,請給open()函數傳入encoding參數,将字元串自動轉換成指定編碼

字元編碼

要讀取非UTF-8編碼的文本檔案,需要給open()函數傳入encoding參數,例如,讀取GBK編碼的檔案:

Python open和with open用法和差別

 遇到有些編碼不規範的檔案,你可能會遇到UnicodeDecodeError,因為在文本檔案中可能夾雜了一些非法編碼的字元。遇到這種情況,open()函數還接收一個errors參數,表示如果遇到編碼錯誤後如何處理。

最簡單的方式是直接忽略:

Python open和with open用法和差別