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

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\testtar.bz2 

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

tar1.jpg

压缩归档文件的解压

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

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

发表评论