python open()函數

探究一下open函數的使用

一、open()的函數原型
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True)
從官方文檔中我們可以看到open函數有很多的參數,我們常用的是file,mode和encoding,對於其它的幾個參數,平時不常用,也簡單介紹一下。
buffering的可取值有0,1, >1三個,0代表buffer關閉(只適用於二進制模式),1代表line buffer(只適用於文本模式),>1表示初始化的buffer大小;
encoding表示的是返回的數據採用何種編碼,一般採用utf8或者gbk;
errors的取值一般有strict,ignore,當取strict的時候,字符編碼出現問題的時候,會報錯,當取ignore的時候,編碼出現問題,程序會忽略而過,繼續執行下面的程序。
newline可以取的值有None, \n,  \r, ’’, ‘\r\n’ ,用於區分換行符,但是這個參數只對文本模式有效;
closefd的取值,是與傳入的文件參數有關,默認情況下爲True,傳入的file參數爲文件的文件名,取值爲False的時候,file只能是文件描述符,什麼是文件描述符,就是一個非負整數,在Unix內核的系統中,打開一個文件,便會返回一個文件描述符。
二、file() 與open()
兩者都能夠打開文件,對文件進行操作,也具有相似的用法和參數,但是,在我看來,這兩種文件打開方式有本質的區別,file爲文件類,用file()來打開文件,相當於這是在構造文件類,而用open()打開文件,是用python的內建函數來操作。
三、參數Mode的基本取值
r、w、a爲打開文件的基本模式,對應着只讀、只寫、追加模式;
b、t、+、U這四個字符,與以上的文件打開模式組合使用,二進制模式,文本模式,讀寫模式、通用換行符,根據實際情況組合使用、
四、 常見的mode取值組合
1、r或rt    默認模式,文本模式讀
2、rb      二進制文件
 
3、w或wt    文本模式寫,打開前文件存儲被清空
4、wb    二進制寫,文件存儲同樣被清空
 
5、a   追加模式,只能寫在文件末尾
6、a+  可讀寫模式,寫只能寫在文件末尾
 
7、w+ 可讀寫,與a+的區別是要清空文件內容
8、r+   可讀寫,與a+的區別是可以寫到文件任何位置
 
五、幾個模式的區別
爲了測試不同模式的區別,我們用一小段代碼來測試寫入文件中的直觀不同。
1
2
3
4
5
6
7
test = "test1\n""test2\n""test3\n" ]
    = open"b.txt""a+")
    try:
        for in test:
            f.write( s )
    finally:
        f.close()

(1)a+與w+模式的區別

(2)a+與r+模式
在寫入文件前,我們在上面那段代碼中加上一句 seek(6),用來定位寫入文件寫入位置。
注意:r+模式打開文件時,此文件必須存在,否則就會報錯,‘r’模式也如此
六、換行符帶來的煩惱
當你用二進制模式將帶有換行符的字符串寫入txt文件時,數據存儲是正確的,但是當用windows平臺的記事本程序打開時,你看到的換行符確實一個個的小黑塊,但是,用文本模式,就不存在這樣的問題。
在這裏,涉及到了不同平臺由於編碼的問題,而對換行符有不同的識別。unix或者linux系統識別\n爲換行符的標識,但是windows平臺的編碼,對\n不予理睬。
但是python自身帶有轉化功能,用文本模式的時候,你不會看到由於平臺不同而造成的換行效果不同,但是,二進制模式的時候,python便不會再去轉化,是什麼,就寫進去什麼,此時的換行符,再用文本模式打開,windows下就不識別‘\n’換行符了。

轉自:https://www.cnblogs.com/rockpine/p/3228890.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章