1. 程式人生 > 實用技巧 >python知識:tarfile模組

python知識:tarfile模組

TarFile類對於就是tar壓縮包例項. 其由member塊組成, member塊則包括header塊和data塊. 每個member以TarInfo物件形式描述. 所以TarFile就是TarInfo的序列. 其初始化函式的形參和TarFile類的屬性對應, 其中比較重要是dereference屬性,預設False(此時symbolic檔案會以符號檔案存進去),設定為True時會將其目標檔案存到壓縮包.

  • getmember(name), getmembers(), getnames(): 分別返回指定檔名的TarInfo, 所有TarInfo和所有TarInfo檔名. 後兩者順序一致. 如果裡面有很多個同名的member, 則取最後的.

  • list(verbose=True)列出tar裡的檔案資訊, verbose相對於ls -l

  • next()就是for方法迭代器呼叫的, 返回下一個TarInfo物件.

  • extractall(path=”.”, members=None), 解壓所有檔案,path是解壓路徑,預設當前目錄,如果指明members(一個子集,TarInfo列表, 也可以是迭代器).

  • extract(member, path=””), 解壓指定member的檔案,path是解壓路徑.

  • extractfile(member): 提取相應物件為一個只讀檔案物件.member這裡可以是檔名或者TarInfo.

  • add(name, arcname=None, recursive=True, exclude=None, filter=None): 根據檔名建立TarInfo物件並新增檔案到壓縮包,可以指定arcname在壓縮包裡面使用的另外的名字,recursive是對資料夾處理時是否遞迴,exclude不建議用,filter(需要用key=value形式)是一個函式名,輸入是TarInfo物件, 返回新的TarInfo物件或None(None的話就不被寫入到壓縮包, 可以用於過濾, 所以替代了exclude)

  • addfile(tarinfo, fileobj=None): 將TarInfo物件或者檔案物件新增到壓縮包.一般配合gettarinfo使用

  • gettarinfo(name=None, arcname=None, fileobj=None): 通過檔名或檔案物件來創造TarInfo物件. arcname可以重新命名檔案

  • close()關閉

     1 import tarfile
     2  
     3 # 壓縮
     4 tar = tarfile.open('your.tar','w')  # 建立一個壓縮包
     5 tar.add('/Users/wupeiqi/PycharmProjects/bbs2.log', arcname='bbs2.log')  # 將檔案新增到壓縮包並命名
     6 tar.add('/Users/wupeiqi/PycharmProjects/cmdb.log', arcname='cmdb.log')  #
     7 tar.close()  # 關閉壓縮包
     8  
     9 # 解壓
    10 tar = tarfile.open('your.tar','r')  # 開啟一個壓縮包
    11 tar.extractall()  # 解壓包內所有檔案(可設定解壓地址)
    12 tar.close()  # 關閉壓縮包

    借鑑:https://www.cnblogs.com/grissom/articles/6644991.html