8.4.8 处理压缩归档
除了常规的tar归档文件之外,tarfile模块还可以处理通过gzip或bzip2协议压缩的归档。要打开一个压缩归档,可以修改传入open()的模式串,根据所需压缩方法的不同,在模式串中包含":gz"或":bz2"。
import tarfile
import os
fmt = '{:<30} {:<10}'
print(fmt.format('FILENAME','SIZE'))
print(fmt.format('README.txt',os.stat('README.txt').st_size))
FILES = [
('tarfile_compression.tar','w'),
('tarfile_compression.tar.gz','w:gz'),
('tarfile_compression.tar.bz2','w:bz2'),
]
for filename,write_mode in FILES:
with tarfile.open(filename,mode=write_mode) as out:
out.add('README.txt')
print(fmt.format(filename,os.stat(filename).st_size),
end=' ')
print([
m.name
for m in tarfile.open(filename,'r:*').getmembers()
])
在打开一个现有的归档并读取数据时,可以指定"r:*"让tarfile自动确定要使用的压缩方法。
运行结果: