python的文件式如何操作_Python文件操作
文件常用IO操作——open
#r模式
f = open("test","r") #只讀
f.read()
f.write("abc")
f.close()#w模式
f = open("test","w") #只寫打開
f.write("abc")
f.close()
r模式
只讀打開文件,若使用write方式,會拋異常
如果文件不存在,拋出異常
w模式
只寫方式打開,如果讀取則拋異常
若文件不存在,則直接創(chuàng)建文件
如果文件存在,清空文件內(nèi)容并寫入
#x模式
f = open("test","x") #只寫打開
f.read()
f.write("abc")
f.close()#a模式
f = open("test","x") #只寫打開
f.read()
f.write("abc")
f.close()
x模式
文件不存在,則直接創(chuàng)建文件,并只寫方式打開
文件存在,則拋異常
a模式
文件存在,只寫打開,追加內(nèi)容
文件不存在,則創(chuàng)建后,只寫打開,追加內(nèi)容
r是只讀,wxa都是只寫
wxa模式都可產(chǎn)生新文件
文件指針
mode = r 指針起始在0位置
mode = a 指針起始在EOF文件末尾位置
tell() 顯示指針當(dāng)前位置
seek(offset[,whence]) 移動文件指針,是按照字節(jié)偏移
seek
seek(offset[,whence]) 移動文件指針。是按照字節(jié)偏移
offset 偏移的字節(jié)數(shù)。可以為正和負(fù)數(shù)。
偏移后可以超過文件末尾EOF,超過部分用字節(jié)O表示。
不能超過文件開始。如果超過會報(bào)錯(cuò)
tell
可以顯示當(dāng)前文件指針位置,注意指針位置是按照字節(jié)計(jì)算的。
fil = open("test","a+") #打開文件
fil.write("abcd你好")
fil.seek(0)#指針回到起始位置
fil.seek(2,0) #指針相對于開始位置向左移動2個(gè)位置
print(fil.tell()) #查看當(dāng)前指針位置
fil.close() #關(guān)閉文件流
lush() 將緩沖區(qū)數(shù)據(jù)寫入到磁盤
close() 關(guān)閉文件流。關(guān)閉前會調(diào)用flush()。文件已經(jīng)關(guān)閉,再次關(guān)閉沒有任何效果
seekable() #是否可以seek
readable() #是否可讀
writable() #是否可寫
closed #是否已經(jīng)關(guān)閉
buffering緩沖區(qū)
-1 表示使用缺省大小的buffer。
0 只在二進(jìn)制模式使用,表示關(guān)閉buffer
1 只在文本模式使用,表示使用行緩沖,意思就是見到換行符flush
大于1 使用指定buffer的大小
buffer緩沖區(qū):緩沖區(qū)是一個(gè)內(nèi)存空間,一般來說是一個(gè)FIFO隊(duì)列,到緩沖區(qū)滿了或者達(dá)到閥值,數(shù)據(jù)才會flush到磁盤。flush()將緩沖區(qū)數(shù)據(jù)寫入到磁盤,close()關(guān)閉文件流,關(guān)閉前會調(diào)用flush()
總結(jié)規(guī)律:
文本模式,一般都用默認(rèn)緩沖區(qū)大小
二進(jìn)制模式,是一個(gè)個(gè)字節(jié)的操作,可以指定buffer的大小
一般來說,默認(rèn)緩沖區(qū)大小是比較好的選擇,除非明確知道,否則不調(diào)控它
一般編程中,明確知道需要寫磁盤了,都會手動調(diào)用一次flush,而不是等到自動調(diào)用flush或者close的時(shí)候。
encoding編碼
encoding 編碼,僅文本模式使用。如果是b字節(jié)模式,無用
默認(rèn)值為None表示使用缺省編碼,依賴操作系統(tǒng)。即 為默認(rèn)值None是,使用文本模式打開文件時(shí),默認(rèn)使用的編碼為系統(tǒng)默認(rèn)編碼。windows下缺省值為GBK(0xBOA1),Linux下缺省值為:UTF-8
上下文管理
一般情況,系統(tǒng)對打開文件上限做了限制,linux中可以使用ulimit -a 查看所有限制。其中open file就是打開文件數(shù)的現(xiàn)在,默認(rèn)是1024。如果打開文件達(dá)到上線,程序在次打開文件就會出錯(cuò)。出現(xiàn)OSError異常。為了防止打開文件后沒有關(guān)閉文件,一般都需要添加異常處理。當(dāng)發(fā)生異常是。關(guān)閉文件。
f =Nonetry:
f= open('test')
f.write("abc") #文件是用只讀模式打開,寫入失敗。
f.close()finally:if f!=None:
f.close()#當(dāng)發(fā)生異常,如果f不為空,關(guān)閉文件流。釋放文件對象
上下文管理:一種特殊的語法,交給解釋器去釋放文件對象
使用with…as 關(guān)鍵字
上下文管理的語句塊并不會開啟新的作用域
with語句塊執(zhí)行完的時(shí)候,會自動關(guān)閉文件對象
第一種寫法示例
delf#使用with...as 語法,當(dāng)代碼塊中出現(xiàn)異常時(shí),會自動關(guān)閉f
with open("test") as f:
f.write("abc") #因?yàn)槭侵蛔x模式打開,所有會出錯(cuò)。寫入失敗#測試f發(fā)現(xiàn)f已經(jīng)關(guān)閉
f.closed
第二種寫法:
f = open("test")
with f:
f.write("abcd") #因?yàn)槭侵蛔x模式打開,所有會出錯(cuò)。寫入失敗#測試f,f已經(jīng)關(guān)閉
f.closed
對于類似于文件對象的IO對象,一般來說都需要在不使用的時(shí)候關(guān)閉,注銷,已釋放資源。IO被打開的時(shí)候,會獲得一個(gè)文件描述符。計(jì)算機(jī)資源是有線的,所以操作系統(tǒng)都會做限制。就是為了保護(hù)計(jì)算機(jī)的資源不要被完全耗盡,計(jì)算資源是共享的,不是獨(dú)占的。
一般情況下,除非特別明確的知道資源情況,否則不要提高資源的限制值來解決問題。
總結(jié)
以上是生活随笔為你收集整理的python的文件式如何操作_Python文件操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支付宝全民保终身养老金怎么退保
- 下一篇: 找了代还信用卡钱刷不出来