用法:
open(file, mode='r', buffering=- 1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
打開
file
並返回相應的文件對象。如果無法打開文件,則會引發OSError
。有關如何使用此函數的更多示例,請參閱讀取和寫入文件。file
是一個 path-like 對象,它給出要打開的文件的路徑名(絕對或相對於當前工作目錄)或要包裝的文件的整數文件說明符。 (如果給定文件說明符,則在關閉返回的 I/O 對象時將其關閉,除非closefd
設置為False
。)mode
是一個可選字符串,用於指定打開文件的模式。它默認為'r'
,這意味著以文本模式打開以供閱讀。其他常見的值是用於寫入的'w'
(如果文件已經存在則截斷文件)、用於獨占創建的'x'
和用於追加的'a'
(在some
Unix 係統上,意味著all
寫入追加到無論當前的查找位置如何,文件的結尾)。在文本模式下,如果未指定encoding
,則使用的編碼取決於平台:調用locale.getpreferredencoding(False)
以獲取當前的語言環境編碼。 (對於讀取和寫入原始字節,請使用二進製模式並保持encoding
未指定。)可用的模式是:特點
意義
'r'
打開閱讀(默認)
'w'
打開寫入,首先截斷文件
'x'
打開以獨占創建,如果文件已存在則失敗
'a'
打開寫入,如果存在則附加到文件末尾
'b'
二進製模式
't'
文本模式(默認)
'+'
開放更新(讀寫)
默認模式是
'r'
(打開閱讀文本,'rt'
的同義詞)。'w+'
和'w+b'
模式打開並截斷文件。'r+'
和'r+b'
模式打開文件時不進行截斷。如概述中所述,Python 區分二進製和文本 I/O。以二進製模式打開的文件(包括
mode
參數中的'b'
)將內容作為bytes
對象返回,無需任何解碼。在文本模式下(默認情況下,或者當't'
包含在mode
參數中時),文件的內容以str
的形式返回,這些字節首先使用平台相關的編碼或使用指定的解碼encoding
如果給定。允許使用額外的模式字符
'U'
,它不再有任何效果,並且被視為已棄用。它之前在文本模式下啟用了通用換行符,這成為 Python 3.0 中的默認行為。有關更多詳細信息,請參閱換行參數的文檔。注意
Python 不依賴於底層操作係統的文本文件概念;所有的處理都是由 Python 自己完成的,因此與平台無關。
buffering
是用於設置緩衝策略的可選整數。傳遞 0 以關閉緩衝(僅在二進製模式下允許),1 以選擇行緩衝(僅在文本模式下可用),以及整數 > 1 以指示固定大小的塊緩衝區的大小(以字節為單位)。當沒有給出buffering
參數時,默認緩衝策略的工作方式如下:- 二進製文件以固定大小的塊緩衝;緩衝區的大小是通過嘗試確定底層設備的 “block size” 並退回到
io.DEFAULT_BUFFER_SIZE
的啟發式方法來選擇的。在許多係統上,緩衝區通常為 4096 或 8192 字節長。 - “Interactive” 文本文件(
isatty()
返回True
的文件)使用行緩衝。其他文本文件使用上述二進製文件的策略。
encoding
是用於對文件進行解碼或編碼的編碼名稱。這應該隻在文本模式下使用。默認編碼取決於平台(無論locale.getpreferredencoding()
返回什麽),但可以使用 Python 支持的任何文本編碼。有關支持的編碼列表,請參閱codecs
模塊。errors
是一個可選字符串,它指定如何處理編碼和解碼錯誤——這不能用於二進製模式。有多種標準錯誤處理程序可用(在錯誤處理程序下列出),但已使用codecs.register_error()
注冊的任何錯誤處理名稱也是有效的。標準名稱包括:'strict'
如果存在編碼錯誤,則引發ValueError
異常。None
的默認值具有相同的效果。'ignore'
忽略錯誤。請注意,忽略編碼錯誤可能會導致數據丟失。'replace'
導致在存在格式錯誤的數據的位置插入替換標記(例如'?'
)。'surrogateescape'
將任何不正確的字節表示為從 U+DC80 到 U+DCFF 的低代理代碼單元。當寫入數據時使用surrogateescape
錯誤處理程序時,這些代理代碼單元將被轉回相同的字節。這對於處理未知編碼的文件很有用。'xmlcharrefreplace'
僅在寫入文件時受支持。編碼不支持的字符將替換為相應的 XML 字符引用&#nnn;
。'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
來使用自定義開啟器。然後通過使用(file
,flags
)調用opener
來獲取文件對象的底層文件說明符。opener
必須返回一個打開的文件說明符(傳遞os.open
作為opener
會產生類似於傳遞None
的函數)。新創建的文件是不可繼承的。
以下示例使用
os.open()
函數的 dir_fd 參數打開相對於給定目錄的文件:>>> import os >>> dir_fd = os.open('somedir', os.O_RDONLY) >>> def opener(path, flags): ... return os.open(path, flags, dir_fd=dir_fd) ... >>> with open('spamspam.txt', 'w', opener=opener) as f: ... print('This will be written to somedir/spamspam.txt', file=f) ... >>> os.close(dir_fd) # don't leak a file descriptor
open()
函數返回的文件對象類型取決於模式。當open()
用於以文本模式('w'
、'r'
、'wt'
、'rt'
等)打開文件時,它返回io.TextIOBase
的子類(特別是io.TextIOWrapper
)。當用於以帶緩衝的二進製模式打開文件時,返回的類是io.BufferedIOBase
的子類。確切的類有所不同:在讀取二進製模式下,它返回一個io.BufferedReader
;在寫入二進製和附加二進製模式下,它返回一個io.BufferedWriter
,在讀/寫模式下,它返回一個io.BufferedRandom
。禁用緩衝時,將返回原始流,即io.RawIOBase
的子類io.FileIO
。另請參閱文件處理模塊,例如
fileinput
、io
(其中聲明了open()
)、os
、os.path
、tempfile
和shutil
。使用參數
file
、mode
、flags
引發審計事件open
。mode
和flags
參數可能已被修改或從原始調用中推斷出來。在 3.3 版中更改:添加了
opener
參數。添加了
'x'
模式。如果以獨占創建模式(
'x'
)打開的文件已經存在,則會引發FileExistsError
。
在 3.4 版中更改:該文件現在不可繼承。
自 3.4 版起已棄用,在 3.10 版中刪除:
'U'
模式。在 3.5 版中更改:如果係統調用被中斷並且信號處理程序沒有引發異常,則該函數現在重試係統調用而不是引發
InterruptedError
例外(見PEP 475理由)。添加了
'namereplace'
錯誤處理程序。
在 3.6 版中更改:添加了支持以接受實現
os.PathLike
的對象。在 Windows 上,打開控製台緩衝區可能會返回
io.RawIOBase
的子類,而不是io.FileIO
。
- 二進製文件以固定大小的塊緩衝;緩衝區的大小是通過嘗試確定底層設備的 “block size” 並退回到
相關用法
- Python open()用法及代碼示例
- Python operator.truth()用法及代碼示例
- Python operator.le()用法及代碼示例
- Python operator.ge()用法及代碼示例
- Python operator.eq()用法及代碼示例
- Python operator.itemgetter用法及代碼示例
- Python operator.not_()用法及代碼示例
- Python operator.lt()用法及代碼示例
- Python operator.attrgetter用法及代碼示例
- Python operator.ne()用法及代碼示例
- Python operator.methodcaller用法及代碼示例
- Python operator.gt()用法及代碼示例
- Python optparse.OptionParser.set_defaults用法及代碼示例
- Python os.path.normcase()用法及代碼示例
- Python os.read()用法及代碼示例
- Python os.DirEntry.inode()用法及代碼示例
- Python os.closerange()用法及代碼示例
- Python os.set_blocking()用法及代碼示例
- Python os.pathconf()用法及代碼示例
- Python os.chflags()用法及代碼示例
注:本文由純淨天空篩選整理自python.org大神的英文原創作品 open。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。