Python使用tarfile打包压缩文件(笔记)
Jan 23, 2014
Python标准库中提供了tarfile模块来支持文件的归档,归档时可选用gzip或bzip2两种压缩方式对归档文件进行压缩。
文件夹归档压缩 #
下述代码中make_tar
函数可实现目录的归档压缩。make_tar()
函数来自 Python Cookbook (第二版) 2.11节-将文件树归档到一个压缩的tar文件
。(添加了注释)
#coding=utf-8
import os,tarfile
def make_tar(folder_to_tar,dst_folder,compression='bz2'):
'''将folder_to_tar文件夹按照compression压缩格式,打包到dst_folder目录下
默认使用bz2压缩,如果指定compression=None,则表示只打包不压缩'''
#是否需要压缩
if compression: #压缩
dst_ext = '.'+compression #打包后文件的后缀名
else:
dst_ext=''
#文件夹名称
fold_name = os.path.basename(folder_to_tar)
#打包的文件名称
dst_name = '%s.tar%s'%(fold_name,dst_ext)#fold_name.tar.bz2
#打包的文件全路径
dst_path = os.path.join(dst_folder,dst_name) #dst_folder/fold_name.tar.bz2
if compression:
dst_cmp = ':'+compression #:bz2 :gz 等表示压缩格式
else:
dst_cmp = ''
#打开一个tar文件
tar = tarfile.TarFile.open(dst_path, 'w'+dst_cmp)
#向tar文件中添加要打包的文件
tar.add(folder_to_tar,fold_name)#打包该目录
#关闭tar文件
tar.close()
#返回打包文件全路径
return dst_path
tar_file_path = make_tar('c:/test','c:/tar')
print tar_file_path # c:/tar\test.tar.bz2
调用make_tar()
函数,将 c:/test
文件夹归档压缩到 c:/tar
文件夹下,文件名为 test.tar.bz2
。
压缩归档文件的解压 #
使用tarfile.open函数以r|bz2模式打开一个tar文件,使用 extractall 将所有文件解包解压。
def read_tar(tar_fold,compression='bz2'):
'''将归档压缩文件,解压到与归档文件同目录下'''
if compression:
dst_cmp = '|'+compression
else:
dst_cmp = ''
tar = tarfile.open(tar_fold,'r'+dst_cmp)
dst_path = os.path.dirname(tar_fold)
print dst_path
tar.extractall(dst_path)#解压所有文件到当前目录
tar.close()
read_tar(tar_file_path)
tarfile.open 的模式列表
Mode | Action |
---|---|
‘r|*’ | Open a stream of tar blocks for reading with transparent compression. |
‘r|’ | Open a stream of uncompressed tar blocks for reading. |
‘r|gz’ | Open a gzip compressed stream for reading. |
‘r|bz2’ | Open a bzip2 compressed stream for reading. |
‘w|’ | Open an uncompressed stream for writing. |
‘w|gz’ | Open an gzip compressed stream for writing. |
‘w|bz2’ | Open an bzip2 compressed stream for writing. |
摘自:python 官方文档