python IO模組【二】:open函式詳解

凱子要麵包發表於2020-12-12

使用open函式可以非常方便的探究IO模組中的具體類的屬性與方法,以及對字串及位元組資料的讀寫處理。其函式簽名及註解如下所示:
 
open(name, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None )

  • 功能:開啟檔案,根據不同模式,返回不同的檔案物件,如果開啟檔案失敗,會丟擲OSError,注意IOError已經是OSError的別名了。當以文字模式開啟時,會返回TestIOWrapper,當以二進位制只讀模式開啟時,返回BufferedReader;當以二進位制只寫模式開啟時,返回BufferedWriter;當以二進位制讀寫模式開啟時,返回BufferedRandom。
  • name:1)值為檔名或者路徑名;2)也可以是一個整數,這個整數表示檔案描述符,如果檔案描述符被指定,則當開啟的檔案物件被關閉時,對應的檔案描述符也會被關閉,除非指定引數closefd為False。
  • mode:指定檔案開啟的模式,非常重要的引數,預設檔案以只讀的文字模式開啟,可選的引數值包括:1)“w”,寫入模式,當檔案不存在時,建立一個新檔案並寫入;當檔案存在時,先截斷檔案為空檔案,然後再寫入。2)“x”,寫入模式,開啟一個新檔案並寫入,若檔案已經存在會報FileExistsError錯誤。3)“a“ 附加模式,另一種寫入模式,當檔案不存在時,先新建檔案,然後再寫入資料;若檔案存在,則將新資料追加到末尾。4)”b“二進位制模式,開啟的檔案物件只接受位元組型字串。5)”t“文字模式,開啟的檔案物件只接受文字型字串,儲存的位元組會先根據特定的編碼方式解碼成文字字串。
  • encoding: 指定編碼的方式,僅適用於文字模式,因為二進位制模式不需要編碼解碼。
  • buffering:指定快取策略,當值為0時,表示關閉快取,這種策略只能在二進位制模式中使用;當值為1時,表示選擇1行文字,這中策略只能在文字模式中使用;當值大於1時,表示固定大小的快取空間。當不指定buffering引數時,對於二進位制模式,一般相當於指定8129個位元組長度的快取空間;對於非互動式的文字模式,也相當於指定8129個位元組長度的快取空間,對於互動式的文字模式,相當於取文字的一行。
  • error:僅適用於文字模式,指定編碼錯誤的處理方式,預設方式為”strict“,表示遇到編碼錯誤,就丟擲VauleError;還有ignore策略,表示忽略不能編碼的資料。
  • newline:指定universal newline mode,該引數僅適用於文字模式,有效取值為None, ‘’, ‘\n’, ‘\r’, and ‘\r\n’,本質就是指定如何換行。對於讀操作,1)當值為None時,universal newline mode被啟用,文字中的任何’\n’, ‘\r’, and ‘\r\n’字元都會被先轉換成’\n’,然後返回資料。2)當值為’‘時,universal newline mode被啟用,文字中的任何’\n’, ‘\r’, and ‘\r\n’字元不會被轉換,而是直接返回。3)對於其他值,niversal newline mode不會被啟用,文字僅會在指定值的地方換行,並且不做轉換直接返回文字。對於寫入操作,當值為None時,任何的’\n’會先轉換成os.linesep,在ubuntu中就是’\n’,然後寫入。2)如果值為空或者’\n’,則不進行任何轉換而是直接寫入。3)如果是其他有效字元,則先將’\n’轉換成指定值,然後寫入。
  • closefd:為True表示檔案物件關閉時,對應的檔案描述符關閉;為False時,表示檔案物件關閉時,當name引數的值不是檔案描述符時,該引數必須為True。
  • opener:將一個可呼叫物件作為opener,自定義的opener必須返回一個檔案描述符。

相關文章