探究python中open函數(shù)的使用
最近,開(kāi)始學(xué)習(xí)python的開(kāi)發(fā),遇到了一點(diǎn)文件操作的問(wèn)題,探究一下open函數(shù)的使用。
一、open()的函數(shù)原型
open(file, mode=‘r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True)
從官方文檔中我們可以看到open函數(shù)有很多的參數(shù),我們常用的是file,mode和encoding,對(duì)于其它的幾個(gè)參數(shù),平時(shí)不常用,也簡(jiǎn)單介紹一下。
buffering的可取值有0,1, >1三個(gè),0代表buffer關(guān)閉(只適用于二進(jìn)制模式),1代表line buffer(只適用于文本模式),>1表示初始化的buffer大??;
encoding表示的是返回的數(shù)據(jù)采用何種編碼,一般采用utf8或者gbk;
errors的取值一般有strict,ignore,當(dāng)取strict的時(shí)候,字符編碼出現(xiàn)問(wèn)題的時(shí)候,會(huì)報(bào)錯(cuò),當(dāng)取ignore的時(shí)候,編碼出現(xiàn)問(wèn)題,程序會(huì)忽略而過(guò),繼續(xù)執(zhí)行下面的程序。
newline可以取的值有None, \n, \r, '', ‘\r\n' ,用于區(qū)分換行符,但是這個(gè)參數(shù)只對(duì)文本模式有效;
closefd的取值,是與傳入的文件參數(shù)有關(guān),默認(rèn)情況下為T(mén)rue,傳入的file參數(shù)為文件的文件名,取值為False的時(shí)候,file只能是文件描述符,什么是文件描述符,就是一個(gè)非負(fù)整數(shù),在Unix內(nèi)核的系統(tǒng)中,打開(kāi)一個(gè)文件,便會(huì)返回一個(gè)文件描述符。
二、file() 與open()
兩者都能夠打開(kāi)文件,對(duì)文件進(jìn)行操作,也具有相似的用法和參數(shù),但是,在我看來(lái),這兩種文件打開(kāi)方式有本質(zhì)的區(qū)別,file為文件類,用file()來(lái)打開(kāi)文件,相當(dāng)于這是在構(gòu)造文件類,而用open()打開(kāi)文件,是用python的內(nèi)建函數(shù)來(lái)操作。
三、參數(shù)Mode的基本取值

r、w、a為打開(kāi)文件的基本模式,對(duì)應(yīng)著只讀、只寫(xiě)、追加模式;
b、t、+、U這四個(gè)字符,與以上的文件打開(kāi)模式組合使用,二進(jìn)制模式,文本模式,讀寫(xiě)模式、通用換行符,根據(jù)實(shí)際情況組合使用、
四、 常見(jiàn)的mode取值組合
1、r或rt 默認(rèn)模式,文本模式讀
2、rb 二進(jìn)制文件
3、w或wt 文本模式寫(xiě),打開(kāi)前文件存儲(chǔ)被清空
4、wb 二進(jìn)制寫(xiě),文件存儲(chǔ)同樣被清空
5、a 追加模式,只能寫(xiě)在文件末尾
6、a+ 可讀寫(xiě)模式,寫(xiě)只能寫(xiě)在文件末尾
7、w+ 可讀寫(xiě),與a+的區(qū)別是要清空文件內(nèi)容
8、r+ 可讀寫(xiě),與a+的區(qū)別是可以寫(xiě)到文件任何位置
五、幾個(gè)模式的區(qū)別
為了測(cè)試不同模式的區(qū)別,我們用一小段代碼來(lái)測(cè)試寫(xiě)入文件中的直觀不同。
test = [ "test1\n", "test2\n", "test3\n" ]
f = open( "b.txt", "a+")
try:
for s in test:
f.write( s )
finally:
f.close()
(1)a+與w+模式的區(qū)別

(2)a+與r+模式

在寫(xiě)入文件前,我們?cè)谏厦婺嵌未a中加上一句 seek(6),用來(lái)定位寫(xiě)入文件寫(xiě)入位置。
注意:r+模式打開(kāi)文件時(shí),此文件必須存在,否則就會(huì)報(bào)錯(cuò),‘r'模式也如此
六、換行符帶來(lái)的煩惱
當(dāng)你用二進(jìn)制模式將帶有換行符的字符串寫(xiě)入txt文件時(shí),數(shù)據(jù)存儲(chǔ)是正確的,但是當(dāng)用windows平臺(tái)的記事本程序打開(kāi)時(shí),你看到的換行符確實(shí)一個(gè)個(gè)的小黑塊,但是,用文本模式,就不存在這樣的問(wèn)題。
在這里,涉及到了不同平臺(tái)由于編碼的問(wèn)題,而對(duì)換行符有不同的識(shí)別。unix或者linux系統(tǒng)識(shí)別\n為換行符的標(biāo)識(shí),但是windows平臺(tái)的編碼,對(duì)\n不予理睬。
但是python自身帶有轉(zhuǎn)化功能,用文本模式的時(shí)候,你不會(huì)看到由于平臺(tái)不同而造成的換行效果不同,但是,二進(jìn)制模式的時(shí)候,python便不會(huì)再去轉(zhuǎn)化,是什么,就寫(xiě)進(jìn)去什么,此時(shí)的換行符,再用文本模式打開(kāi),windows下就不識(shí)別‘\n'換行符了。
以上就是關(guān)于python中open函數(shù)使用方法的相關(guān)介紹,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
python封裝json格式字符串并處理單雙引號(hào)問(wèn)題
大家好,本篇文章主要講的是python封裝json格式字符串并處理單雙引號(hào)問(wèn)題,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02
在pycharm中使用git版本管理以及同步github的方法
今天小編就為大家分享一篇在pycharm中使用git版本管理以及同步github的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Python各類圖像庫(kù)的圖片讀寫(xiě)方式總結(jié)(推薦)
這篇文章主要介紹了Python各類圖像庫(kù)的圖片讀寫(xiě)方式總結(jié)(推薦),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
詳解如何在python中讀寫(xiě)和存儲(chǔ)matlab的數(shù)據(jù)文件(*.mat)
這篇文章主要介紹了詳解如何在python中讀寫(xiě)和存儲(chǔ)matlab的數(shù)據(jù)文件(*.mat),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
2018年P(guān)ython值得關(guān)注的開(kāi)源庫(kù)、工具和開(kāi)發(fā)者(總結(jié)篇)
本文給大家總結(jié)了2018年P(guān)ython值得關(guān)注的開(kāi)源庫(kù)、工具和開(kāi)發(fā)者,需要的朋友可以參考下2018-01-01
Python實(shí)現(xiàn)九宮格式的朋友圈功能內(nèi)附“馬云”朋友圈
PIL(Python Imaging Library)是一個(gè)非常強(qiáng)大的Python庫(kù),但是它支持Python2.X, 在Python3中則使用的是Pillow庫(kù),它是從PIL中fork出來(lái)的一個(gè)分支。這篇文章主要介紹了用Python搞定九宮格式的朋友圈功能內(nèi)附“馬云”朋友圈 ,需要的朋友可以參考下2019-05-05
python實(shí)現(xiàn)漢諾塔遞歸算法經(jīng)典案例
這篇文章主要大家分享了python實(shí)現(xiàn)漢諾塔遞歸算法經(jīng)典案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
Mac 使用python3的matplot畫(huà)圖不顯示的解決
今天小編就為大家分享一篇Mac 使用python3的matplot畫(huà)圖不顯示的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11

