Python io 模組之 open 方法

2022-07-05 04:45:16 字數 1835 閱讀 4749

io.open(file, mode='r', buffering=-1, encoding=none, errors=none, newline=none, closefd=true)

開啟file物件並返回對應的資料流。如果開啟失敗,則丟擲ioerror異常。

file要麼是乙個指向需要被開啟檔案的路徑字串,或者是檔案描述符序號。

mode是乙個可選字串,用來指明開啟檔案的模式。預設為'r',意思是可讀文字模式。另乙個常見的引數值是'w',表示寫入(如果檔案存在,則首先清空檔案內容。)。'a'表示追加,在某些unix系統中表示無論當前處於文字什麼位置,所以內容都要追加到檔案末尾。在文字模式中,如果沒有指明編碼,則預設使用作業系統的編碼。(對於原始位元組的讀寫使用二進位制模式,而不在乎編碼是否指定。)以下是可用的模式:

字元含義

'r'唯讀模式(預設)

'w'清空原檔案,寫入模式。

'a'寫入模式,如果檔案存在 則追加到檔案末尾。

'b'二進位制模式。

't'文字模式(預設)

'+'開啟磁碟檔案進行更新(讀寫)

'u'通用新行模式(只為向後相容,不推薦再使用。)

預設的模式是'rt'(文字可讀)。對於二進位制訪問,'w+b'模式會開啟並清空檔案,而'r+b'只開啟檔案而不清空。

python區分檔案的開啟方式是二進位制還是文字,哪怕底層的作業系統不區分它們。用二進位制模式(即在mode引數中包含'b')開啟的檔案會以位元組物件返回,不進行任何解碼。在文字模式(預設情況或者是mode引數中包含't')下,位元組會首先被按照指定的編碼方式進行解碼,如果沒有給出指定的編碼方式,則使用作業系統預設的編碼方式。

buffering是乙個可選的整數,用來設定buffering策略。0表示關閉buffering(只在二進位制模式下),1表示選擇行進行緩衝(buffering)(僅限於文字模式),大於1的整數表示選擇固定大小的塊進行緩衝。如果沒有給定buffering引數,預設的緩衝策略如下:

encoding是編碼名稱,用以編碼或者解碼檔案。這只在文字模式中使用。預設的編碼方式是系統的編碼方式(即locale.getpreferredencoding()返回值),任何python支援的編碼都可以充當該引數。檢視codec模組了解所有被支援的編碼。

errors是乙個可選字串,用以指明如何處理編碼或解碼異常,該引數在二進位制模式不可用。傳入'strict'用以在編碼異常發生時丟擲valueerror異常,或者使用'ignore'忽略異常。(注意:忽略編碼異常可能導致資料丟失。)'replace'表示遇見不規則資料時插入乙個替換符(例如?)代替它。'xmlcharrefreplace'表示使用合適的xml字元參考進行替換,'backslashreplace'表示使用反斜槓代替。任何註冊到codecs.register_error()中的異常處理名稱都是有效的。

newline表示如何使用通用新行來標識乙個新行。它可能是none,'','\n','\r'以及'\r\n'。它的工作方式如下:

如果closefd為false,並且給定的是檔案描述符而不是檔名,當檔案關閉的時候,底層的檔案描述符仍然保持開啟。如果給定了檔名,則closefd無效而且必須是true(預設就是true)。

open()函式返回的檔案物件取決於模式。當使用文字模式開啟檔案時,它返回乙個textiobase的子類。當使用二進位制開啟時,返回的是bufferediobase的子類。準確細分為:可讀二進位制模式,返回bufferreader物件;在可寫和追加模式中,返回bufferwriter物件,在讀寫模式中,返回bufferrandom。當buffering關閉時,原始資料流,乙個rawiobase的子類將被返回。

還可以使用unicode或者位元組字串當作乙個檔案來進行讀寫。對於unicode字串,將像文字一樣使用stringio對其進行處理,而二進位制則使用bytesio。

Python IO多路復用select模組

多路復用的分析例項 服務端 客戶端 服務端配置 from socket import import time import select server socket af inet,sock stream server.bind 127.0.0.1 8080 server.listen 5 serv...

python IO多路復用,select模組

觸發機制 1 水平觸發 2 邊緣觸發 io多路復用單執行緒實現併發,實現模組 1 select 效率最低 2 poll 3 epoll 最好,nginx的實現 linux下有這3種模組,windows下只有select模組 io多路復用的好處 同時可以監聽多個連線 io多路復用的select模組觸發...

檔案系統之open

在檔案讀寫之前,我們必須先開啟檔案。從應用程式的角度來看,這是通過標準庫的open函式完成的,該函式返回乙個檔案描述符。核心中是由系統呼叫do sys open 函式完成。系統呼叫 syscall define3 open.具體實現 long do sys open int dfd,const ch...