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

starkbl發表於2021-09-09

檔案

檔案是資料在外部介質上的資料的集合,對於檔案在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():讀取檔案的每一行 
    例如:

(1).使用read()!/bin/pythonf=open('file.txtx','r')s=f.read()f.close()print(s)(2).使用readline讀取一行讀完整個檔案!/bin/pythonf=open('file.txtx','r')whil True:           //讀完整個檔案    s=f.readline()    //讀取一行    if s=='':        break    print sf.close(3).使用readlines()讀取檔案的每一行,讀完整個檔案!/bin/pythonf=open('file.txtx','r')s=f.readlines()        //讀取後形成一個元組for line in s:    print line,f.close()

寫入: 
write(str)


  • 二進位制檔案的讀取和寫入 
    寫去: 
    對於二進位制檔案,是無法將數字,bool型別的資料寫入到二進位制檔案中。 
    (1).使用struct模組中的pack()方法將數字和bool型轉化為位元組串,然後使用write方法寫入到二進位制檔案中。 
    方法:pack(‘格式傳’,格式物件) 
    (2).使用pickle模組中的dump方法直接將物件轉化為位元組串並寫入到二進位制檔案中。 
    方法:dump(格式obj,f) 
    例如:

(1).使用struct模組 !/bin/pythonimport strcutf=open('file.bit','wb')n=100w=Truex=392.0str=struct.pack('if?',b,x,w)f.write(str)f.close()(2).使用pickle模組!/bin/pythonimport picklef=open('file.bit','wb')n=100w=Truex=392.0pickle.dump(n,f)pickle.dump(w,f)pickle.dump(x,f)f.close()

讀取: 
二進位制檔案的讀取就是寫入的逆過程 
(1).讀取位元組串,使用函式將其還原成資料,使用struct模組中的unpack()方法,返回一個元組 
方法:unpack(格式傳,位元組表)

!/bin/pythonimport structf=open('file.bit','rb')str=f.read(3)tu=struct.unpack('if?',str)    //返回一個元組print tuf.close()

(2).使用pickle模組中load方法直接讀取並還原成原有資料,返回還原後的物件 
方法:load(f)

!/bin/pythonimport picklef=open('file.bit','rb')n=pickle.load(f)      #讀出檔案的資料個數while i
  • 檔案物件的|常用方法

方法名 說明
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函式進行遞迴

!/bin/pythonimport osdef dir_view(path):    list_dir=os.listdir(path)    for dir in list_dir:        sub_path=os.path.join(path,dir)    #獲取完整路徑        if os.path.isdir(sub_path):            dir_view(path)

(2).使用os模組的walk方法,返回一個元組

!/bin/pythonimport osdef view_dir(path):    list_dir=os.walk(path)     #返回一個元組,包括3個元素,所有路徑名,所有目錄列表,檔案列表    for root,dirs,files in list_dir:                for d in dirs:                         print os.path.join(root,d)  #獲取完整路徑        for f ini files:                       print os.path.join(root,f)   #獲取檔案完整路徑

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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3705/viewspace-2802411/,如需轉載,請註明出處,否則將追究法律責任。

相關文章