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

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

Jan 23, 2014
Coding
Python

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

tar1.png

压缩归档文件的解压 #

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