一. 基本檔案操作1. 檔案操作基本概況
在python中,檔案對象時內建類型file的執行個體,內建函數open會建立並返回一個檔案對象。函數原型 fp = open(“test.txt”,”r”),在這裡讀和寫的唯一用法區別是第二個參數問題,也即open的開啟模式。
我們來看一個簡單的例子:
對於open的開啟模式,可以有一下這些:
r 以讀方式開啟
w 以寫方式開啟,
a 以追加模式開啟 (從 EOF 開始, 必要時建立新檔案)
r+ 以讀寫入模式開啟
w+ 以讀寫入模式開啟 (參見 w )
a+ 以讀寫入模式開啟 (參見 a )
rb 以二進位讀模式開啟
wb 以二進位寫入模式開啟 (參見 w )
ab 以二進位追加模式開啟 (參見 a )
rb+ 以二進位讀寫入模式開啟 (參見 r+ )
wb+ 以二進位讀寫入模式開啟 (參見 w+ )
ab+ 以二進位讀寫入模式開啟 (參見 a+ )
對於檔案對象fp有很多內建函數,常見的有這麼些:
os.mknod("test.txt")
#建立空檔案
fp.read([size])
#size為讀取的長度,以byte為單位
fp.readline([size])
#讀一行,如果定義了size,有可能返回的只是一行的一部分
fp.readlines([size])
#把檔案每一行作為一個list的一個成員,並返回這個list。其實它的內部是通過迴圈調用readline()來實現的。如果提供size參數,size是表示讀取內容的總長,也就是說可能唯讀到檔案的一部分。
fp.write(str)
#把str寫到檔案中,write()並不會在str後加上一個分行符號
fp.writelines(seq)
#把seq的內容全部寫到檔案中(多行一次性寫入)。這個函數也只是忠實地寫入,不會在每行後面加上任何東西。
fp.close()
#關閉檔案。python會在一個檔案不用後自動關閉檔案,不過這一功能沒有保證,最好還是養成自己關閉的習慣。 如果一個檔案在關閉後還對其進行操作會產生ValueError
fp.flush()
#把緩衝區的內容寫入硬碟
fp.fileno()
#返回一個長整型的”檔案標籤“
fp.isatty()
#檔案是否是一個終端裝置檔案(unix系統中的)
fp.tell()
#返迴文件操作標記的當前位置,以檔案的開頭為原點
fp.next()
#返回下一行,並將檔案操作標記位移到下一行。把一個file用於for … in file這樣的語句時,就是調用next()函數來實現遍曆的。
fp.seek(offset[,whence])
#將檔案打操作標記移到offset的位置。這個offset一般是相對於檔案的開頭來計算的,一般為正數。但如果提供了whence參數就不一定了,whence可以為0表示從頭開始計算,1表示以當前位置為原點計算。2表示以檔案末尾為原點進行計算。需要注意,如果檔案以a或a+的模式開啟,每次進行寫操作時,檔案操作標記會自動返回到檔案末尾。
fp.truncate([size])
#把檔案裁成規定的大小,預設的是裁到當前檔案操作標記的位置。如果size比檔案的大小還要大,依據系統的不同可能是不改變檔案,也可能是用0把檔案補到相應的大小,也可能是以一些隨機的內容加上去。
2. 讀,寫檔案操作
我們先來看一下讀檔案的簡單的例子:
而對於上述操作中的文字檔test.txt大小為41kb,但是差距已經產生了,也就是說,當你的記憶體允許的話,我們建議一次性讀入,速度是最快的,當然,我們也可以很方便的使用readlines進行讀取,這種逐行迭代的方式讀取會很節省記憶體資源。
我們再來看一個寫檔案的例子:
當我們運行程式之後,我們發現,test.txt裡面只剩下了writeTo2的內容,這裡面有一點要注意,就是,只要你用”w”或”wb”模式開啟一個檔案的時候,檔案內容就被擦除了,我們試試看:
當我們跑完程式之後,發現,test.txt空了!如果我們想要把新資料添加在原有資料之後,應該使用”a”,”ab”, 這一點切記,我們看一下例子: