Python使用tarfile打包压缩文件(笔记)

Python标准库中提供了tarfile模块来支持文件的归档,归档时可选用gzip或bzip2两种压缩方式对归档文件进行压缩。

文件夹归档压缩

下述代码中make_tar函数可实现目录的归档压缩。make_tar()函数来自Python Cookbook (第二版) 2.11节-将文件树归档到一个压缩的tar文件。(添加了注释)

[python]#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\testtar.bz2 [/python]

调用make_tar()函数,将c:/test文件夹归档压缩到c:/tar文件夹下,文件名为test.tar.bz2。

tar1.jpg

压缩归档文件的解压

使用tarfile.open函数以r|bz2模式打开一个tar文件,使用extractall将所有文件解包解压。

[python]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)[/python]

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 官方文档

作者:JarvisChu
原文链接:Python使用tarfile打包压缩文件(笔记)
版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

发表评论