open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
打開 file 並返回一個相應的 文件對象.如果文件不能被打開, 拋出 OSError
異常.
參數 file 是一個字符串表示的文件名稱,或者一個數組表示的文件名稱。文件名稱可以是相對當前目錄的路徑,也可以是絕對路徑表示。(如果給出了一個文件描述器,則當關閉返回的I / O對象時除外,除非closefd設置為False
。
參數 mode 是指明打開文件的模式。默認值是'r'
,表示使用文本的方式打開文件來讀取。其他常見值為'w'
用於寫入(如果文件已經存在則截斷文件),'x'
用於排他性創建,'a'
(在某些 Unix系統上,意味着全部寫入追加到文件的末尾,而不管當前的查找位置)。在文本模式下,如果未指定encoding,則使用的編碼取決於平台:locale.getpreferredencoding(False)
以獲取當前語言環境編碼。(對於讀取和寫入原始字節,使用二進制模式,不指定編碼。可用的模式有:
字符 | 含義 |
---|---|
'r' |
打開閱讀(默認) |
'w' |
打開寫入,首先截斷文件 |
'x' |
打開獨占創建,如果文件已經存在則失敗 |
'a' |
打開寫入,追加到文件末尾(如果存在) |
'b' |
二進制模式 |
't' |
文本模式(默認) |
'+' |
打開磁盤文件進行更新(讀取和寫入) |
'U' |
通用換行符模式(已棄用) |
默認模式為'r'
(打開閱讀文本,'rt'
的同義詞)。對於二進制讀寫訪問,模式'w b'
打開並將文件截斷為0字節。'r b'
打開文件而不截斷。
如概述中所述,Python區分二進制和文本I / O。以二進制模式打開的文件(包括模式參數中的'b'
)將內容作為字節
對象,而不進行任何解碼。在文本模式(默認情況下,或當't'
包括在模式參數中)時,文件的內容將作為str
,這些字節已經使用平台相關編碼首先解碼,或者如果給出則使用指定的編碼。
注意:Python不依賴於底層操作系統的文本文件的概念;所有的處理都是由Python本身完成的,因此是平台無關的。
參數 buffering是用於設置緩沖策略的可選整數。通過0以關閉緩沖(僅在二進制模式下允許),1選擇行緩沖(僅在文本模式下可用)和整數當未給出buffers參數時,默認緩沖策略工作如下:
- 二進制文件以固定大小的塊緩沖;使用啟發式嘗試確定底層器件的“塊大小”並回退到
io.DEFAULT_BUFFER_SIZE
來選擇緩沖區的大小。在許多系統上,緩沖區通常為4096或8192字節長。 - “交互式”文本文件(
isatty()
返回True
的文件)使用行緩沖。其他文本文件使用上述策略用於二進制文件。
參數 encoding是用於解碼或編碼文件的編碼的名稱。這應該只在文本模式下使用。默認編碼是平台相關的(無論locale.getpreferredencoding()
返回),但是可以使用Python支持的任何文本編碼。有關支持的編碼列表,請參閱編解碼器
模塊。
參數 errors是一個可選字符串,指定如何處理編碼和解碼錯誤 - 這不能在二進制模式下使用。雖然使用codecs.register_error()
注冊的任何錯誤處理名稱也有效,但仍提供了多種標准錯誤處理程序(在錯誤處理程序下列出)。標准名稱包括:
'strict'
引發ValueError
例外,如果存在編碼錯誤。默認值None
具有相同的效果。'ignore'
忽略錯誤。請注意,忽略編碼錯誤可能會導致數據丟失。'replace'
會導致替換標記(例如'?'
)插入到存在格式錯誤的數據的位置。'surrogateescape'
將表示任何不正確的字節,作為從U DC80到U DCFF范圍內的Unicode私人使用區域中的代碼點。當寫入數據時使用surrogateescape
錯誤處理程序時,這些專用代碼點將被轉回相同的字節。這對於處理未知編碼中的文件很有用。- 僅當寫入文件時,才支持
'xmlcharrefreplace'
。編碼不支持的字符將替換為相應的XML字符引用
'backslashreplace'
通過Python的反斜杠轉義序列替換格式錯誤的數據。'namereplace'
(也僅在編寫時支持)用\ N {...}
轉義序列替換不支持的字符。
參數 newline控制通用換行符模式的工作原理(僅適用於文本模式)。它可以是None
、''
、'\n'
、'\r'
、'\r\n'
。它的工作原理如下:
- 從流讀取輸入時,如果newline為
None
,則啟用通用換行符模式。輸入中的行可以以'\n'
,'\r'
或'\r\n'
結尾,它們在返回給調用者之前被轉換成'\n'
。如果它是''
,則啟用通用換行符模式,但行結尾將返回給調用者而不會轉換。如果它具有任何其它合法值,則輸入行僅由給定字符串終止,並且行結尾被返回給調用者而不會轉換。 - 將輸出寫入流時,如果newline為
None
,則寫入的任何'\n'
字符都將轉換為系統默認行分隔符os.linesep
。如果newline是''
或'\n'
,則不會進行轉換。如果newline是任何其他合法值,寫入的任何'\n'
字符都將轉換為給定字符串。
如果closefd是False
並且給出了文件描述器而不是文件名,則當文件關閉時,基本文件描述器將保持打開。如果給定文件名,則closefd必須為True
(默認值),否則將產生錯誤。
通過傳遞可調用對象opener可以使用自定義開啟器。然后通過調用opener(文件,標志)獲取文件對象的基礎文件描述器。opener必須返回一個打開的文件描述器(傳遞os.open
為opener 結果類似的功能 None
)。