Python2.7-tarfile


tarfile 模塊,讀寫 tar 壓縮文件,包括用 gzip 或是 bz2 壓縮的文件(如tar.bz2、tar.gz),一般使用 TarFile 類完成操作

1、模塊方法

tarfile.is_tarfile(name):判斷 name 是否是一個能被模塊讀取的 tar 文件
tarfile.open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs):返回一個 TarFile 對象,簡便的打開文件方法

參數設置:
name:文件路徑名
mode:打開文件方式,有 'filemode[:compression]' 和 'filemode|[compression]',后者用於處理流數據
'r' 或 'r:*' 或 'r|*':正常壓縮打開讀取
'r:' 或 'r|':不壓縮打開讀取
'r:gz' 或 'r|gz':gzip 壓縮打開讀取
'r:bz2' 或 'r|bz2':bzip2 壓縮打開讀取
'a' 或 'a:':不壓縮追加打開
'w' 或 'w:' 或 'w|':不壓縮打開寫
'w:gz' 或 'w|gz':gzip 壓縮打開寫
'w:bz2' 或 'w|bz2':bzip2 壓縮打開寫
fileobj:如果指定了,就作為 name 的文件對象

2、模塊常數

tarfile.USTAR_FORMAT、tarfile.GNU_FORMAT、tarfile.PAX_FORMAT、tarfile.DEFAULT_FORMAT:都是內置的壓縮格式
3、模塊對象
3.1 TarFile 對象
3.1.1 初始化構建類TarFile(name=None, mode='r', fileobj=None, format=DEFAULT_FORMAT, tarinfo=TarInfo, dereference=False, ignore_zeros=False, encoding=ENCODING, errors=None, pax_headers=None, debug=0, errorlevel=0)

參數設置:
name:文件路徑名,如果指定了 fileobj,可以省略
mode:打開文件方式,有 r 和 w、a,默認為 r
fileobj:如果指定了,就作為 name 的文件對象,會根據文件對象本身的打開方式覆蓋 mode
format:壓縮格式,必須是模塊常數中的一個
tarinfo:可以用自定義的類替換默認的模塊的 TarInfo 對象
dereference:False 情況下向壓縮包內加入符號鏈接和硬鏈接,True 情況下把文件內容加入到壓縮包內。此參數對不支持符號鏈接的系統無作用
ignore_zeros:False 情況下遇到空塊就認為到文件尾,True 情況下跳過空塊和無效塊,獲得盡可能多的數據,對於讀取連續數據或損壞的壓縮包有用
encoding、errors:控制字符串的轉碼,默認設置可以解決大多數問題
pax_headers:unicode 字符串轉碼的一個字典,可以幫助解決不能正確解碼的問題
debug:0-3,0 沒有 debug 信息,3 輸出所有 debug 信息至 sys.stderr
errorlevel:0 忽略所有錯誤,1 拋出所有致命錯誤,2 拋出所有錯誤

3.1.2 類方法

TarFile.open(...):另一種構造方法,模塊方法的 tarfile.open() 是這個方法的刪減版

3.1.3 實例方法
getmember(name):返回一個 TarInfo 對象,包含壓縮文件里名為 name 的信息
getmembers():返回一個列表,每個元素都是一個 TarInfo 對象,對應壓縮文件里的每個文件
getnames():列表形式返回壓縮文件里的每個文件名
list(verbose=True):把壓縮包內容輸出到 sys.stdout,verbose 為 False 時只打印名字,True 時輸出同 ls -l
next():返回壓縮包中下一個文件的 TarInfo 對象
extractall(path=".", members=None):解壓所有文件至當前目錄,path 指定解壓至別的目錄,member 指定只解壓其中的哪些文件
extract(member, path=""):解壓名為 member 的文件到當前目錄,path 指定解壓至別的目錄
add(name, arcname=None, recursive=True, exclude=None, filter=None):把名為 name 的文件添加至壓縮包中,arcname 指定在壓縮包內名字,recursive 指定是否遞歸整個文件夾,exclude 必須是一個接收一個文件名為參數,返回布爾值的函數,返回值為真就把這個文件排除不添加,反之添加,filter 必須是一個接收一個 TarInfo 對象的函數,返回一個修改后的 TarInfo 對象
addfile(tarinfo, fileobj=None):把名為 tarinfo 的 TarInfo 對象加入到壓縮包內
gettarinfo(name=None, arcname=None, fileobj=None):從 os.stat() 的結果或一個存在的文件創建一個 TarInfo 對象
close():關閉壓縮文件,在寫模式下會在尾部添加兩個 0 塊(two finishing zero blocks)

3.2 TarInfo 對象

3.2.1 初始化構建類:TarInfo(name=""),一般不直接構建,都由 getmember()、getmembers() 或 gettarinfo() 得到

3.2.2 實例方法

frombuf(buf):從字符串緩沖區 buf 創建一個 TarInfo 對象
fromtarfile(tarfile):讀取壓縮包 tarfile 的下一個文件,返回 TarInfo 對象
tobuf(format=DEFAULT_FORMAT, encoding=ENCODING, errors='strict'):從一個 TarInfo 對象創建一個字符串緩沖區,參數同 TarFile 類
isfile()、isreg()、isdir()、issym()、islnk()、ischr()、isblk()、isfifo()、isdev():判斷實例文件屬性

3.2.3 實例屬性

name:文件名
size:文件字節大小
mtime:最后修改時間
mode:文件權限
type:文件類型
linkname:目標文件名
uid:存儲此對象的用戶 ID
gid:存儲此對象的組 ID
uname:用戶名
gname:組名
pax_headers:包含轉換鍵值的字典


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM