一、差別
使用open打開檔案,必須要使用close關閉檔案,是以,為了保證無論是否出錯都能正确地關閉檔案。
with open可以不用close()方法關閉檔案,無論在檔案使用中遇到什麼問題都能安全的退出,即使發生錯誤,退出運作時環境時也能安全退出檔案并給出報錯資訊。
二、open用法
三、with open用法
如果是配置檔案,調用readlines()最友善:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yMiZTO4cTNwYDMwIjZwEDZiJ2MkN2YmVzNykDMzAjMz8CXzEzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL5M3Lc9CX6MHc0RHaiojIsJye.png)
四、打開檔案逐行讀取技巧
1.readline,優點:節省記憶體,不需要一次性把檔案内容放入記憶體中缺點:速度相對較慢
2.readlines,一次性讀取所有行,記憶體消耗過大
3.直接for循環
4.read,類似readline
調用read()會一次性讀取檔案的全部内容,如果檔案有10G,記憶體就爆了,是以,要保險起見,可以反複調用read(size)方法,每次最多讀取size個位元組的内容。另外,調用readline()可以每次讀取一行内容,調用readlines()一次讀取所有内容并按行傳回list。是以,要根據需要決定怎麼調用。
如果檔案很小,read()一次性讀取最友善;如果不能确定檔案大小,反複調用read(size)比較保險;如果是配置檔案,調用readlines()最友善。
五、寫檔案
寫檔案
open()函數傳入辨別符’w’或者’wb’表示寫文本檔案或寫二進制檔案:
反複調用write()來寫入檔案,但是務必要調用f.close()來關閉檔案。寫檔案時,作業系統往往不會立刻把資料寫入磁盤,而是放到記憶體緩存起來,空閑的時候再慢慢寫入。隻有調用close()方法時,作業系統才保證把沒有寫入的資料全部寫入磁盤。忘記調用close()的後果是資料可能隻寫了一部分到磁盤,剩下的丢失了。是以,還是用with語句來得保險:
要寫入特定編碼的文本檔案,請給open()函數傳入encoding參數,将字元串自動轉換成指定編碼
字元編碼
要讀取非UTF-8編碼的文本檔案,需要給open()函數傳入encoding參數,例如,讀取GBK編碼的檔案:
遇到有些編碼不規範的檔案,你可能會遇到UnicodeDecodeError,因為在文本檔案中可能夾雜了一些非法編碼的字元。遇到這種情況,open()函數還接收一個errors參數,表示如果遇到編碼錯誤後如何處理。
最簡單的方式是直接忽略: