檔案是我們儲存資訊的地方,我們經常要對檔案進行讀、寫、删除等的操作,在python中,我們可用python提供的函數和方法友善地操作檔案。檔案可以通過調用open或file來打開,open通常比file更通用,因為file幾乎都是為面向對象程式設計量身打造
使用open()函數可打開檔案,文法格式如下:
filename是你要操作的檔案名,如果不在目前路徑,需指出具體路徑。mode是打開檔案的模式,表示你要如何操作檔案,bufsize表示是否使用緩存。
mode
模式
描述
r
以讀方式打開檔案,可讀取檔案資訊。
w
以寫方式打開檔案,可向檔案寫入資訊。
a
以追加方式打開檔案,檔案指針自動移到檔案尾。
r+
以讀寫方式打開檔案,可對檔案進行讀和寫操作。
w+
消除檔案内容,然後以讀寫方式打開檔案。
a+
以讀寫方式打開檔案,并把檔案指針移到檔案尾。
b
以二進制模式打開檔案,而不是以文本模式。該模式隻對windows或dos有效,類unix的檔案是用二進制模式進行操作的。
bufsize
bufsize取值
禁用緩沖
1
行緩沖
>1
指定緩沖區的大小
<1
系統預設的緩沖區大小
open()函數傳回一個檔案對象,我們可通過read()或write()函數對檔案進行讀寫操作,下面是一些檔案對象方法:
檔案對象方法
方法
f.close()
關閉檔案,記住用open()打開檔案後一定要記得關閉它,否則會占用系統的可打開檔案句柄數。
f.fileno()
獲得檔案描述符
f.flush()
重新整理輸出緩存
f.isatty()
如果檔案是一個互動終端,則傳回true,否則傳回false。
f.read([count])
讀出檔案,如果有count,則讀出count個位元組。
f.readline()
讀出一行資訊。
f.readlines()
讀出所有行,也就是讀出整個檔案的資訊。
f.seek(offset[,where])
把檔案指針移動到相對于where的offset位置。offset為0表示檔案開始處,這是預設值 ;1表示目前位置;2表示檔案結尾。
f.tell()
獲得檔案指針位置。
f.truncate([size])
截取檔案,使檔案的大小為size。
f.write(string)
把string字元串寫入檔案。
f.writelines(list)
把list中的字元串一行一行地寫入檔案。
1.檔案的打開或建立
2.讀取檔案
3.檔案系統操作
4.擷取檔案狀态
stat子產品描述了os.stat(filename)傳回的檔案屬性清單中各值的意義。我們可友善地根據stat子產品存取os.stat()中的值。
5.串行化檔案
6.記憶體檔案
shutil子產品是一個進階的檔案處理子產品,可實作檔案的拷貝、删除等操作。
打開檔案程式會調用内置的open函數,首先是外部名,接着就是處理模式。
常見的檔案運算:
在任何情況下,python程式中的文本檔案采用字元串的形式,讀取文本時會傳回字元串形式的文本
從檔案中讀取的資料回到腳本時是一個字元串,是以如果字元串不是你所需的,就得将其轉換成其他類型的python對象
首先看一個檔案處理的一個簡單的例子:
把一行文本寫成字元串,包含行終止符\n,寫入方法不會為我們添加行終止符
必須使用轉換工具把對象轉換成字元串,注意檔案資料在腳本中一定是字元串,而寫入方法不會自動地替我們做任何向字元串格式轉換的工作
一旦我們建立了檔案愛你就可以通過打開和讀取字元串來檢視檔案的内容,而print語句則會解釋内嵌行終止符來給使用者滿意的結果:
鑒于python不會自動把字元串轉換為數字或其他類型的對象,需要使用諸如索引、加法等普通對象工具
使用eval可以把字元串轉換成對象,pickle子產品是能夠讓我們直接在檔案中存儲幾乎任何python對象的進階工具,并不要求把字元串轉換來轉換去
pickle子產品執行所謂的對象序列化,也就是對象和位元組字元串之間的互相轉換