用法:
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'(在someUnix 係統上,意味著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 descriptoropen()函數返回的文件對象類型取決於模式。當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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
