1. 程式人生 > >檔案IO常用操作—python

檔案IO常用操作—python

1、檔案開啟操作—open
open(file, mode=’r’, buffering=-1, encoding=’None’, errors=None, closed=True, opener=None)
open操作位開啟一個檔案,並返回檔案物件和檔案描述符,如果開啟失敗,丟擲異常。
(1)mode引數:
r:以只讀模式開啟。在在r模式下開啟的檔案只能進行read操作,開啟時檔案指標在檔案文字的開頭,當進行一次read操作之後,檔案指標已經只想了檔案末尾,再次read就沒有內容了,但是不會報錯
w:只寫模式開啟,如果檔案不存在,則新建一個開啟,如果已存在,則開啟並清空
x:建立並寫入一個新檔案,如果檔案存在則報錯。x模式和w模式不同在於x模式只能是新建一個檔案並寫入,如果檔案已存在,則報錯。
a:追加模式檔案不存在,則新建一個
mode模式還有三種附加模式:
t:以文字形式操作,為上方附加模式
b:以二進位制形式操作
(2)buffering緩衝區:
在使用open命令時,buffering的預設值為-1,表示使用預設大小的buffering,如果是二進位制,使用io.DEFAULT_BUFFER_SIZE的值,預設為4096或者8192,這是作業系統的預設值,如果是文字模式,如果是終端裝置,使用行緩衝的方式,如果不是終端,則使用二進位制的策略。
buffering = 0表示只在二進位制模式下使用,而且關閉flush
buffering = 1表示只在文字模式下使用,見到換行符就flush
buffering大於 1用於指定buffering的大小
(3)encoding編碼格式
encoding僅在文字模式時使用,none表示使用預設編碼,預設編碼依賴於作業系統,在windows作業系統下預設為gbk編碼,在linux作業系統下位utf-8
(4)其他引數
errors:表示什麼樣的編碼錯誤將被捕獲,None和strict表示有編碼錯誤將丟擲ValueError異常,ignore表示忽略異常
newline文字模式中,換行的轉換。可以為None、空串、’\r’、’\n’、’\r\n’,當使用預設值None時,‘\r’,‘\n’,‘\r\n’都將被替換為’\n’,‘’表示不會自動轉換通用的換行符,其他合法字元表示換行符就是指定字元,就會按照指定字元分行寫時
closed關閉檔案描述符,True表示關閉它,False表示會在檔案關閉後保持這個描述符
2、檔案的讀寫與關閉
f.read():讀檔案,在r模式和增強模式下可執行。read(size = -1)size表示讀取的多少個字元或位元組;複數或者None表示讀取到EOF
f.write(‘xxx’):寫操作,在w、x、a模式和增強模式下可執行。將指定字串寫入到檔案中,並返回字元的個數
writelines(lines)將字串列表寫入檔案
f.close():檔案關閉操作,flush並關閉檔案物件
f.readline():按行讀取,readline(size = -1)按行讀取檔案內容。size設定一次能夠讀取行內幾個字元或位元組
f.readlines():多行讀取,readlines(hint = -1)讀取所有行的列表,指定hint則返回指定的行數
3、檔案指標操作
對檔案的讀寫等操作是通過檔案指標的移動來完成的。當檔案開啟之後,就會有一個檔案指標出現,r、w、x模式開啟檔案指標為0(檔案開頭),a模式開啟指標在檔案末尾(EOF),所有的檔案操作都是從當前檔案指標處開始。
tell()命令可以顯示當前檔案指標的位置
seek(offset[,whence])命令可以移動檔案指標。其中sffset為檔案指標偏移的位元組數, whence為偏移的參考位置。seek指標對以t模式開啟和以b模式開啟有所不同
a) 文字模式:
在文字模式下,whence的預設值為0,表示相對於檔案開頭,此時offset的值只能為正整數
whence = 0為預設值,表示相對於檔案開頭,此時offset值只能為正整數,可以超界
whence = 1表示在相對於指標當前位置,此時offset值只能為0,表示原地踏步
whence = 2表示相對於檔案末尾,此時offset值只能為0,表示將指標移到檔案末尾。
以下舉例為英文模式,每一個英文字元在utf-8模式下都只佔一個字元,所以offset移動位元組數與字元數相同。

f = open('wang','r+')#開啟檔案‘wang’
print(f.read())#讀檔案,列印Nice to meet you! Nice to meet you, too! This is a greeting in English.
print(f.tell())#檔案指標指向檔案末尾,列印70
f.seek(0)#將檔案指標指向檔案開頭等價於f.seek(0,0)相當於檔案開頭移動0位元組
print(f.tell())#列印指標位置0

f.seek(0,2)#將檔案指標指向檔案末尾,注意,此時offset只能為0
print(f.tell())#列印70
f.seek(5)#等價於d.seek(5,0),相對於檔案開頭向右移動5個位元組,
print(f.tell())#列印5 print(f.read())#列印to meet you!\nNice to meet you, too!This is a greeting in English. f.close()#關閉檔案

b) 位元組模式:
二進位制模式下
whence = 0 為預設值,表示從檔案頭開始,offset為正整數,表示所移位數
whence = 1 表示從當前位置開始的位移數,小於0向左,大於0向右,可以在右方超界,但是左方不能超界
whence = 2 表示相對於末尾位置的位移數,正數向右,負數向左
由於位元組模式不涉及編碼解碼格式,所以在位元組模式下不會出現上方的情況