關於python的open函式的誤區。

2021-07-09 06:34:53 字數 2000 閱讀 6953

前段日子看了關於python檔案和流的一些文獻,其中最基礎的便是python的乙個內建函式:open!!!

很簡單的乙個函式,他的原型是這樣的:

open(name,[,mode[,buffering]])

顧名思義,name引數指的就是檔名,mode是模式引數,buffering是控制緩衝引數,後兩個為可選引數。open函式會返回乙個檔案物件。

for example:

>>> f = open('myfile.txt')

這樣就可以開啟當前目錄下的myfilef.txt檔案。這裡舉的例子是相對當前目錄的路徑,當然檔案路徑也可以是絕對路徑(windows中為c:\,linux or unix下則是~/)。

今天我想和大家講的就是這個函式的引數使用上的問題,當然我只是乙個大一學生,乙個python菜鳥,我希望熱愛python的大神們能為我解疑,我只是和大家分享我的看法,想法,以後每次發表的部落格也都一樣,我希望能和跟多熱愛python的大家多交流,多借鑑,學習,無論是和我一樣的菜鳥還是python大神。好了,進入正題,let's go!

open函式的第乙個引數不必說。

第二個引數(mode):常用值有' r ',' w ',' a ',' b ',' + ',分別是讀模式,寫模式,追加模式,二進位制模式,讀寫模式。其中' b ',' + '能能加到其他模式中,舉個例子:比如' rb '讀取二進位制檔案,' r+ '可以進行讀寫檔案。

好了,我要講的就是open的第三個引數!buffering!

如果引數為0(或是布林值的false),i/o就是無緩衝的。

如果引數為1(或是布林值的true),i/o就是有緩衝的。

如果引數為大於1的數字,則此值代表緩衝區的大小(單位是位元組);如果為-1或是任何負數,則表示使用預設的緩衝區大小。

這樣理解完,似乎很簡單,不就是當引數為0或false時輸入輸出無緩衝,否則就有緩衝,而且大於1的數表示緩衝區大小,負數則使用預設緩衝區大小嗎。

for example:

現在我的當前目錄下有個myfile.txt檔案。進入python互動式:

>>> f = open( ' myfile.txt ' , ' w ' , 0 )#這時進入無緩衝的寫模式

>>> f.write( ' i love python! ' )#這時在另乙個終端用cat檢視下檔案內容,就可以檢視到 i love python!

>>> f = open( ' myfile.txt ' , ' w ' , 1 )#這時進入有緩衝的寫模式

>>> f.write( ' i love python! ' )#這時在另乙個終端檢視時檔案內容為空

>>> f.close()#這時再次檢視,就可以看到 i love python!

前面的很好理解,因為後者是有緩衝的嘛,需要close或者flush才能寫入磁碟。但是如果引數是第三種情況的話呢,也就是大於一或是乙個負數,即自己設定緩衝區大小。以前我一直覺得這不就是有緩衝嗎,設定個緩衝區大小嘛,一旦超過緩衝區大小就直接寫入磁碟或者報錯啥的唄,是不是也有很多人也這麼想的呢。

but!前幾天一次偶然,我發現並不是這樣,然後我在此思考,嘗試好幾天,網上也似乎沒有關於這個問題的解疑解答。但我希望大家知道這個關於open函式的第三個函式的這個情況就好。

for example:

>>> f = open( ' myfile.txt ' , ' w ' , 100)#這時進入有緩衝的,緩衝區大小為100位元組的寫模式

>>> f.write( ' life is short , use python! ' )#內容遠小於緩衝區大小沒錯,理論上這時檔案內容應該為空,但是現實殘酷,我竟然cat到了life is short,use   python!!!

各種嘗試,查閱,總結。我認為事實上當你為緩衝區設定大小時,open進入的卻是無緩衝模式。

當時我一直使用的是ubuntu15.10下的python2.7.10。後來我用os下的python2.7.8試了多次,發現卻是我以前理解的那樣,確實進去了有緩衝的模式,並自己設定了緩衝區大小。

所以希望大家能自己簡單測試一下,並將結果告訴我,希望大神能給小弟解疑答惑

關於python的open 函式

大家都知道,python的open 函式可以用來開啟txt,但是你們知不知道,open函式可以開啟所有的檔案型別嗎?open函式語法 open 檔名 模式 不過這裡有一點要注意的是 open函式的w模式,是會覆蓋原來的檔案,重新編寫 有些檔案,比如docx,你編寫了再用word開啟檔案是會損壞的 但...

關於open函式的補充

open函式的系統呼叫有兩種方式,一種是沒有檔案建立乙個檔案並且開啟,一種是只有以唯讀只寫等方式開啟。以下演示這兩種方式的 include include include include include include include include include include define e...

python中的open函式

這裡簡單記錄一下python中的with open 函式中的引數設定 python的open方法用來開啟乙個檔案。第乙個引數是檔案的位置和檔名,第二個引數是讀寫模式。這裡我們採用w模式,也就是寫模式。在這種模式下,檔案原有的內容將會被刪除。其中對於第二個引數 ru 或 ua 以讀方式開啟,同時提供通...