2010-01-09 128 views

回答

100

要建立一个.tar.gz(又名.tgz)对整个目录树:

import tarfile 

def make_tarfile(output_filename, source_dir): 
    with tarfile.open(output_filename, "w:gz") as tar: 
     tar.add(source_dir, arcname=os.path.basename(source_dir)) 
+9

正如对读者的一个提示,如果你遗漏'arcname = os.path.basename(source_dir)',那么它会给你'source_dir'的整个路径结构在tar文件中(在大多数情况下,这可能是不方便的) – Shule 2016-01-30 06:50:10

+0

未定义全局名'tarfile' – NDEthos 2017-02-15 21:03:00

+2

'import tarfile' – 2017-02-16 09:01:48

72
import tarfile 
tar = tarfile.open("sample.tar.gz", "w:gz") 
for name in ["file1", "file2", "file3"]: 
    tar.add(name) 
tar.close() 

如果你想创建一个TAR.BZ2压缩文件,只需用” .tar.bz2" 格式并替换文件的扩展名 “W:GZ” 与 “W:BZ2”。

+1

你应该真的在Python中使用'tarfile.open(..',而不是手动调用'open'和'close',打开常规文件时也是如此 – Sheljohn 2017-03-13 17:15:57

28

您可以拨打tarfile.openmode='w:gz',意思是“打开gzip压缩写入”。

您可能需要结合使用.tar.gz的文件名(name参数为open),但不影响压缩功能。

顺便说一句,你平时用的'w:bz2'模式得到更好的压缩,就像tar平时甚至可以更好地与bzip2压缩比它可以与gzip压缩。

+4

只需简单的说明bzip2-压缩的压缩包应以“.tar.bz2”结尾 – 2010-01-09 05:23:16