3.6 管理压缩包

使用tarfile库读取与创建tar包与压缩包

Python自带的tarfile模块可以方便读取tar归档文件,也可以处理使用gzip和bz2压缩归档文件tar.gz和tar.bz2。

最主要的open原型为:

tarfile.open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs)

mode的值代表处理模式:

'r' or 'r:*'   Open for reading with transparent compression (recommended).
'r:'   Open for reading exclusively without compression.
'r:gz'   Open for reading with gzip compression.
'r:bz2'   Open for reading with bzip2 compression.
'a' or 'a:'   Open for appending with no compression. The file is created if it does not exist.
'w' or 'w:'   Open for uncompressed writing.
'w:gz'   Open for gzip compressed writing.
'w:bz2'   Open for bzip2 compressed writing.

例如:

#!/usr/bin/python3
import tarfile
import glob

tar = tarfile.open('allpy.tar.gz', 'w:gz')
files = glob.glob('*.py')

for file in files:
    tar.add(file)

运行结果为:将当前目录下的所有py文件打包为:allpy.tar.gz

解压缩:

#!/usr/bin/python3
import tarfile
import os

tar = tarfile.open('allpy.tar.gz', 'r:gz')
os.mkdir('allpy')
os.chdir('allpy')
tar.extractall()
tar.close()

结果为在当前目录下创建一个allpy的文件夹,将allpy.tar.gz里面的文件解压在allpy文件夹中:

root@liu-ubuntu:~# ./13-tarfile2.py 
root@liu-ubuntu:~# ls
01-argv.py      05-configparser.py  09-glob.py     13-tarfile2.py  b        file3
02-stdinout.py  06-argparse.py      10-walk.py     a               example  test.conf
03-sysexit.py   07-log.py           11-filecmp.py  allpy           file1    test.py
04-getpass.py   08-fnmatch.py       12-tarfile.py  allpy.tar.gz    file2
root@liu-ubuntu:~# ls allpy
01-argv.py      04-getpass.py       07-log.py      10-walk.py     test.py
02-stdinout.py  05-configparser.py  08-fnmatch.py  11-filecmp.py
03-sysexit.py   06-argparse.py      09-glob.py     12-tarfile.py

与tarfile对应的是zipfile模块,zipfile是处理zip压缩的,不再详述。