天天看點

[Python]學習基礎篇:檔案和目錄

檔案是資料在外部媒體上的資料的集合,對于檔案在Linux系統上包括普通檔案,目錄檔案,二進制檔案,裝置檔案等。

檔案的打開或者建立 

方法:open(‘file_name’,’打開方式’[,buf_size]) 

buf_size:參數指的是檔案緩存區的大小,0代表不緩存,1代表緩存,使用系統預設設定的緩存區大小,大于1代表緩存大小。 

打開方式:如下表

打開方式

說明

‘r’

隻讀的方式打開檔案,若檔案不存在,則産生異常

‘r+’

以讀寫的方式方式打開檔案,不删除原内容,若檔案不存在,産生異常

‘w’

隻寫的方式打開檔案,删除原内容,無檔案則建立

‘w+’

讀寫的方式發開檔案,删除原内容,無檔案則建立

‘a’

以追加的方式打開一個檔案,不删除原内容,在檔案末尾追加資料,無檔案則建立

‘a+’

以讀寫的方式打開檔案,不删除原内容,在末尾寫資料,無檔案則建立

‘rb’

同’r’,打開二進制檔案

‘rb+’

同’r+’,打開二進制檔案

‘wb’

同’w’,打開二進制檔案

‘wb+’

同’w+’,打開二進制檔案

‘ab’

同’a’,打開二進制檔案

‘ab+’

同’a+’,打開二進制檔案

普通檔案的讀寫 

讀取: 

read([num]) 

若num不寫時,讀取整個檔案的内容,num>0時讀取num大小位元組的數 

readline():讀取檔案的一行 

readlines():讀取檔案的每一行 

例如:

寫入: 

write(str)

二進制檔案的讀取和寫入 

寫去: 

對于二進制檔案,是無法将數字,bool類型的資料寫入到二進制檔案中。 

(1).使用struct子產品中的pack()方法将數字和bool型轉化為位元組串,然後使用write方法寫入到二進制檔案中。 

方法:pack(‘格式傳’,格式對象) 

(2).使用pickle子產品中的dump方法直接将對象轉化為位元組串并寫入到二進制檔案中。 

方法:dump(格式obj,f) 

二進制檔案的讀取就是寫入的逆過程 

(1).讀取位元組串,使用函數将其還原成資料,使用struct子產品中的unpack()方法,傳回一個元組 

方法:unpack(格式傳,位元組表)

(2).使用pickle子產品中load方法直接讀取并還原成原有資料,傳回還原後的對象 

方法:load(f)

檔案對象的|常用方法

方法名

flush()

把緩存區的内容寫入檔案

close()

把緩存取得内容寫入檔案,并關閉檔案釋放對象

seek(offset[,whence])

檔案指針移動

tell()

傳回檔案指針目前位置

常用的檔案操作函數

對于檔案的操作,python提供了os子產品和os.path子產品的函數 

(1).os子產品

函數名

access(path)

根據mode指定的權限通路檔案

chmod()

修改檔案的通路權限

remove(path)

删除path指定的檔案

rename(src,dst)

重命名

stat(path)

傳回指定檔案的屬性

fstat(path)

傳回打開檔案的所有屬性

listpath(path)

傳回path目錄下的檔案和目錄

(2).os.path子產品

abspath(path)

傳回path的絕對路徑

dirname(path)

傳回目錄的路徑

exists(path)

檔案是否存在

getsize(file_name)

傳回檔案的大小

isabs(path)

是否為絕對路徑

isdir(path)

是否為目錄

isfile(path)

是否為檔案

splitext(p)

從路徑中分割出擴充名

splitdrive(p)

從路徑中分割出驅動器的名稱

walk(path)

周遊目錄數

目錄的建立 

(1).建立單個目錄 

方法:mkdir(path) 

(2).建立多級目錄 

方法:makedirs(path1/path2/….)

目錄的删除 

(1).删除一個目錄 

方法:rmdir(path) 

(2).删除多級目錄 

方法:removedirs(path1/path2/….)

目錄的周遊 

對于目錄的周遊,在上述檔案的操作方法中有一個listdir(path)方法,此方法隻能列出path目錄下的目錄和檔案,但是不能列出子目錄下的檔案和目錄。 

(1).使用listdir函數進行遞歸

(2).使用os子產品的walk方法,傳回一個元組

python對于檔案的操作比較簡單,不像c那樣比較複雜,對于同一個操作有幾個不同的函數,例如對于檔案的打開,C語言中有open函數,fopen函數等。

本文轉自lnsaneLlinux部落格51CTO部落格,原文連結http://blog.51cto.com/lnsane784/2057037如需轉載請自行聯系原作者

Insane_linux