文件IO常用操作
10年積累的網(wǎng)站制作、成都網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有商河免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。一般說IO操作,指的是文件IO;如果是網(wǎng)絡(luò)IO,都會直接說網(wǎng)絡(luò) IO
open 打開操作
open(file, mode = "r" , buffering = -1 , encoding = None , errors = None , newline = None,closefd = True , opener = None)
1.打開一個文件,返回一個文件對象(流對象)和文件描述符。打開文件失敗,則返回異常
2.基本使用:創(chuàng)建一個文件test ,然后打開它,用完關(guān)閉
文件操作中,最常用的操作就是讀和寫。
文件訪問的模式有兩種:
1.文本模式 t
2.二進制模式 b
不同模式下,操作函數(shù)不盡相同,表現(xiàn)的結(jié)果也不一樣
注意:windows中使用 copypage代碼頁,可以認為每一個代碼頁就是一張編碼表。cp936 => GBK
open函數(shù)的參數(shù)
file:
打開 或者要創(chuàng)建的文件名。如果路徑不存在。默認是當(dāng)前路勁
mode 模式 缺省值 "r"
"r" 只讀打開文件
- 如果使用write方法會拋 異常
- 如果文件不存在,拋出 FileNotFoundError異常
"w" 表示只寫方式打開
- 如果 read 則拋出異常
- 如果文件不存在,則直接創(chuàng)建新空白文件
- 如果文件存在,則清空文件內(nèi)容
"x"表示只寫方式打開
- 如果文件不存在,創(chuàng)建文件,并只寫方式打開
- 如果文件存在,拋出 FileExistError異常
"a"表示只寫方式打開(常用)
- 文件不存在,創(chuàng)建文件,并只寫方式打開,追加內(nèi)容
- 文件存在,只寫方式打開,在后面追加內(nèi)容
r 是制度,wxa 都是只寫。wxa 都可以產(chǎn)生新文件,w不管文件存在與否,都會生成全新內(nèi)容的文件;a不管文件是否存在,都能在打開的文件的尾部追加;x必須要求文件實現(xiàn)不存在,自己造一個新文件
需要配合使用,不能單獨使用的功能:
"t" 文本模式--- 字符流 :(默認字符流)
將文件的字節(jié)按照某種字符編碼理解,按照字符操作。open的默認mode 就是 “rt”
"b" 二進制模式 --- 字符流:
將文件按照字節(jié)理解,與字符編碼無關(guān)。二進制模式操作時,字節(jié)操作使用bytes類型
"+" 為 r,w,a,x 提供確實的讀或?qū)懝δ?,但是獲取文件對象依舊按照r、w、a、x自己的特征。 + 不能單獨使用
文件指針
文件指針:只想當(dāng)前字節(jié)位置
mode = r,指針起始在0
mode = a,指針起始在EOF
tell(): 顯示指針當(dāng)位置
seek(offset[,whence = 0]):移動文件指針位置
seek是按照字節(jié)偏移的
offest 偏移多少字節(jié)
whence 從哪里開始(0,1,2 => 首,相對現(xiàn)在位置,尾)
1.字符流:whence = 1,2 offest只能 = 0
whence = 0 offest >= 0
. 2.字節(jié)流: whence = 1,2 offest 可正可負,不能超左邊界
whence = 0 offest >= 0
buffering 緩沖區(qū)
-1 表示使用缺省大小的buffer。
如果是二進制模式,使用io.EDFAULT_BUFFER_SIZE值,默認是4096 或者 8192
如果是文本模式,如果是終端設(shè)備,
seek()調(diào)用會引起flush()
buffer 緩沖區(qū)
緩沖一個內(nèi)存空間,一般來說是一個 FIFO隊列,當(dāng)緩沖區(qū)滿了或者達到閾值,數(shù)據(jù)才會flush到次磁盤
flush()將緩沖區(qū)數(shù)據(jù)寫入磁盤,close()關(guān)閉前會調(diào)用flush(),seek()調(diào)用會引起flush()
io.EDFAULT_BUFFER_SIZE缺省穿沖區(qū)大?。?096,8192)
enconding : 編碼,僅文本模式使用
None表示使用缺省編碼,依賴操作系統(tǒng)。windows 下缺省 GBK(0xB0A1),Linux 下缺省 UTF-8(0xE5 95 8A)
最好不用缺省,同意帶上utf-8
其它參數(shù)
errors
什么樣的編碼錯誤將被捕獲, None和strict 表示有編碼錯誤將拋出 valueError異常,ignore表示忽略
newline
文本模式中,換行的轉(zhuǎn)換??梢詾镹one、" "空串、"\r"、"\n"、"\r\n"
closedfd關(guān)閉文件描述符,True表示關(guān)閉它。False 會在文件關(guān)閉是保留它。
fileobjt.fileno()
0,標準輸入
1,標準輸出
2,標準錯誤輸出
read
read(size=-1)
size 表示讀取的多少個字符或者字節(jié);負數(shù)或者None表示讀取到EOF
readline(size=-1)
一行行讀取文件內(nèi)容。size設(shè)置一次能讀取行內(nèi)幾個字符或者字節(jié)。
readlines(hint=-1) ->返回所有行的列表
讀取所有行的列表。指定hint則返回指定的行數(shù)
# 按行迭代
f = open("test") #返回可迭代對象
for line in f:
print(line)
f.close
write
write(s),把字符串s寫入到文件中并返回字符的個數(shù)
writelines(lines),將字符串列表寫入文件,lines 要元素是字符串的列表
close
flush 并關(guān)閉文件對象
文件已經(jīng)關(guān)閉,再次關(guān)閉沒有任何效果
其它
seekable() 是否可以seek
readable() 是否可讀
writeable() 是否可寫
closed 是否已經(jīng)關(guān)閉
上下文管理
1.使用with ... as : 關(guān)鍵字
2.上下文管理的語句塊并不會開啟新的作用域
3.with語句塊執(zhí)行完的時候,會自動關(guān)閉文件對象。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。