如何使用Python创建完整的压缩tar文件?

时间:2010-01-09 04:59:37

标签: python compression zip tarfile

如何在Python中使用压缩创建.tar.gz文件?

7 个答案:

答案 0 :(得分:140)

为整个目录树构建.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))

答案 1 :(得分:79)

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”。

答案 2 :(得分:30)

您使用mode='w:gz'来呼叫tarfile.open,意思是“打开gzip压缩写入。”

您可能希望使用name结束文件名(open参数.tar.gz),但这不会影响压缩功能。

顺便说一句,你通常使用'w:bz2'模式获得更好的压缩效果,就像tar通常可以使用bzip2压缩得更好,而不是使用gzip进行压缩。< / p>

答案 3 :(得分:1)

除了@Aleksandr Tukallo的答案外,您还可以获得输出和错误消息(如果发生)。在following answer上很好地解释了使用tar压缩文件夹。

import traceback
import subprocess

try:
    cmd = ['tar', 'czfj', output_filename, file_to_archive]
    output = subprocess.check_output(cmd).decode("utf-8").strip() 
    print(output)          
except Exception:       
    print(f"E: {traceback.format_exc()}")       

答案 4 :(得分:0)

先前的答案建议使用tarfile python模块在python中创建.tar.gz文件。显然,这是一个很好的python风格的解决方案,尽管它在归档速度方面存在严重缺陷。 This question提到,tarfile比在Linux中调用直接命令慢大约两倍。根据我的经验,这一估计是非常正确的。

因此,为了加快归档速度,可以使用subprocess模块直接使用Linux命令:

subprocess.call(['tar', '-czf', output_filename, file_to_archive])

答案 5 :(得分:0)

对@THAVASI.T 的回答进行了小幅更正,该答案省略了“tarfile”库的导入,并且没有定义第三行中使用的“tar”对象。

import tarfile

with tarfile.open("save.tar.gz","w:gz") as tar:
    for file in ["a.txt","b.log","c.png"]:
        tar.add(os.path.basename(file))

答案 6 :(得分:-1)

在此 tar.gz文件在打开的视图目录中压缩 解决时使用os.path.basename(file_directory)

with tarfile.open("save.tar.gz","w:gz"):
      for file in ["a.txt","b.log","c.png"]:
           tar.add(os.path.basename(file))

它在tar.gz文件中的使用压缩在目录中