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压缩的,不再详述。