1. 程式人生 > >Python標準庫:內建函式open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=T

Python標準庫:內建函式open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=T

               

本函式是開啟一個檔案並返回檔案物件。如果檔案不能開啟,丟擲異常OSError

引數file是一個字串表示的檔名稱,或者一個數組表示的檔名稱。檔名稱可以是相對當前目錄的路徑,也可以是絕對路徑表示。

引數mode是指明開啟檔案的模式。預設值是’r’,表示使用文字的方式開啟檔案來讀取。

‘r’表示開啟檔案只讀,不能寫。

‘w’表示開啟檔案只寫,並且清空檔案。

‘x’表示獨佔開啟檔案,如果檔案已經存開啟就會失敗。

‘a’表示開啟檔案寫,不清空檔案,在檔案後尾追加的方式寫入。

‘b’表示二進位制的模式開啟檔案。

‘t’表示文字模式,預設情況下就是這種模式。

‘+’開啟檔案更新(讀取或寫入)。

預設時的模式就相當於’rt’。比如’w+b’就是開啟檔案進入讀寫,把檔案清空;’r+b’開啟檔案,但不把檔案清空。

引數buffering是一個可選的引數,用來表示緩衝區的策略選擇。設定為0時,表示不使用緩衝區,直接讀寫,僅在二進位制模式下有效。設定為1時,表示在文字模式下使用行緩衝區方式。設定為大於1時,表示緩衝區的設定大小。如果引數buffering沒有給出,使用預設時,會採用下面策略來選擇:

1)對於二進位制檔案模式時,採用固定塊記憶體緩衝區方式,記憶體塊的大小根據系統裝置的分配的磁碟塊來決定,如果獲取系統磁碟塊的大小失敗,就使用內部常量io.DEFAULT_BUFFER_SIZE定義的大小。一般的作業系統上,塊的大小是4096或者8192位元組大小。

2)對於互動的文字檔案(採用isatty()判斷為True

)時,採用一行緩衝區的方式。其它文字檔案使用跟二進位制一樣的方式。

引數encoding是指明對檔案編碼,僅適用於文字檔案。如果不明編碼方式,預設是使用locale.getpreferredencoding()函式返回的編碼方式。

引數errors是用來指明編碼和解碼錯誤時怎麼樣處理。不能在二進位制的模式下使用。

1)當指明為’strict’時,編碼出錯則丟擲異常ValueError

2)當指明為’ignore’時,忽略錯誤。

3)當指明為’replace’時,使用某字元進行替代模式,比如使用’?’來替換出錯的。

4)其它相應還有surrogateescape/xmlcharrefreplacs/backslashreplace

引數newline是用來控制文字模式之下,一行的結束字元。可以是None’’,\n\r\r\n等。

當在讀取模式下,如果新行符為None,那麼就作為通用換行符模式工作,意思就是說當遇到\n\r\r\n都可以作為換行標識,並且統一轉換為\n作為文字輸入的換行符。當設定為空’’時,也是通用換行符模式工作,但不作轉換為\n,輸入什麼樣的,就保持原樣全輸入。當設定為其它相應字元時,就會判斷到相應的字元作為換行符,並保持原樣輸入到文字。

當在輸出模式時,如果新行符為None,那麼所有輸出文字都是採用\n作為換行符。如果設定為’’或者\n時,不作任何的替換動作。如果是其它字元,會在字元後面新增\n作為換行符。

引數closefd是用來當給一個檔案控制代碼傳進來時,而當退出檔案使用時,而不對檔案控制代碼進行關閉。如果傳遞一個檔名進來,這個引數無效,必定為True方式。

引數opener是用來實現自己定義開啟檔案方式。這種使用方式比較複雜,比如開啟相對目錄的檔案,可以採用下面的例子方式:

>>> 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

例子:

#在C盤下面有一個檔案abc.txt。#open()with open(r'c:\\abc.txt') as demo:    for line in demo:        print(line)        

結果輸出如下:

this is test file.

1,2

3

4

8888888888888

蔡軍生  QQ:9073204 深圳