1. 程式人生 > >Python中 with open(file_abs,'r') as f: 的用法以及意義

Python中 with open(file_abs,'r') as f: 的用法以及意義

轉自https://www.cnblogs.com/tianyiliang/p/8192703.html

Python內建了讀寫檔案的函式,用法和C是相容的。本節介紹內容大致有:檔案的開啟/關閉、檔案物件、檔案的讀寫等。

  本章節僅示例介紹 TXT 型別文件的讀寫,也就是最基礎的檔案讀寫,也需要注意編碼問題;其他檔案的讀寫及編碼相關詳見專題的博文。

 

  open()   close()     with open(...) as ...

    看以下示例就能瞭解 Python 的 open() 及 close() 函式。這邊呼叫 read()方法可以一次讀取檔案的全部內容,Python把內容讀到記憶體,用一個str物件表示,具體使用參見下文。

    在 E 盤 python_file 資料夾下新建一 a.txt,輸入隨意,如下:

      

    Python 操作 開啟及關閉方式 如下:

      

    注意 open() 之後 一定要 close()。但由於檔案讀寫時都可能產生IOError,為了保證無論是否出錯都能正確地關閉檔案,我們用 try ... finally 來實現:

      

 

    python 簡化了改寫法,即用 with open(...) as ...  ; 建議之後檔案讀寫都用該寫法:

     

 

    上面,你肯定注意到了引數 "r";該引數決定了開啟檔案的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個引數是非強制的,預設檔案訪問模式為只讀(r)。

模式 描述
r 以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。
rb 以二進位制格式開啟一個檔案用於只讀。檔案指標將會放在檔案的開頭。這是預設模式。
r+ 開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。
rb+ 以二進位制格式開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。
w 開啟一個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
wb 以二進位制格式開啟一個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
w+ 開啟一個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
wb+ 以二進位制格式開啟一個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
a 開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
ab 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
a+ 開啟一個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。
ab+ 以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。

 

  File 物件

    file 為一物件,它有一些內建屬性,如下

      

檔案物件屬性 描 述
file.closed 表示檔案已經被關閉,否則為False
file.mode Access檔案開啟時使用的訪問模式
file.encoding 檔案所使用的編碼
file.name 檔名
file.newlines 未讀取到行分隔符時為None,只有一種行分隔符時為一個字串,當檔案有多種型別的行結束符時,則為一個包含所有當前所遇到的行結束的列表
file.softspace 為0表示在輸出一資料後,要加上一個空格符,1表示不加。這個屬性一般程式設計師用不著,由程式內部使用

 

  

  read()    read(size)   readline()   readlines()

    之前的例子已經接觸到了 read() 函式,該函式會會一次性讀取檔案的全部內容,如果能確保檔案的大小,自然可以。但若檔案過大,記憶體就爆了,所以,可以反覆呼叫read(size)方法,每次最多讀取size個位元組的內容;也可呼叫 readline() 每次讀取一行內容;而呼叫readlines()可以一次讀取所有內容並按行返回list。總之,根據需求來。僅以 txt 檔案為例,其他的檔案讀取需要特殊處理;另外,檔案的格式編碼方式也需要注意;這邊僅介紹讀取方法,其他的會出專題來學習。

    在D:\python_file 下新建 poet.txt;示例如下,由於一箇中文會佔多個位元組,故read(size) 部分會亂碼,如:

    

     

 

    

 

  write()

    寫檔案和讀檔案是一樣的,唯一區別是呼叫open()函式時,傳入識別符號'w'或者'wb'表示寫文字檔案或寫二進位制檔案;'a' 對應的表示追加等。

    如下示例,由於 write.txt 檔案不存在,建立該檔案並寫入:

    

    在上例基礎上,繼續,該檔案被重寫:

    

    繼續,這次使用追加,會在檔案結尾追加: