如何使用Python在flat tar.gz中保存tar文件

如何使用Python在flat tar.gz中保存tar文件,python,gzip,tar,Python,Gzip,Tar,我有一个具有以下结构的tar文件: example.tar --file1 --file2 我想将文件另存为tar.gz,因此它看起来像: example.tar.gz --file1 --file2 我试图在TarFile模块中使用TarFile.add(),但我只创建了另一个层次结构的tar.gz文件 我只找到了两个解决方案,这似乎不是最优的: “untar”文件,然后将它们放入新的“tar.gz”文件中 从Python脚本调用以下Unix命令gzip-c example.tar>exa

我有一个具有以下结构的tar文件:

example.tar
--file1
--file2
我想将文件另存为tar.gz,因此它看起来像:

example.tar.gz
--file1
--file2
我试图在
TarFile
模块中使用
TarFile.add()
,但我只创建了另一个层次结构的tar.gz文件

我只找到了两个解决方案,这似乎不是最优的:

  • “untar”文件,然后将它们放入新的“tar.gz”文件中
  • 从Python脚本调用以下Unix命令
    gzip-c example.tar>example.tar.gz

  • 在Python中有更好的方法吗?

    一个
    tar.gz
    文件只是一个
    tar
    文件,它已经
    gzip
    ped了。您必须知道,由于您编写了此Unix命令:

    gzip -c example.tar > example.tar.gz
    
    如果要在Python中执行相同的操作,只需使用库:

    事实上,这直接等同于文档中的一个

    这是最优的吗

    • 我们正在避免使用无故障和柏油部分。这是非常简单的工作(
      tar
      是一种非常简单的格式…),但不是零
    • 显然,我们必须读取tarball的每个字节,并且您必须写入gzip tarball的每个字节,但是我们希望避免一次读取整个文件(这可能会耗尽您所有的RAM),或者一次读取太少以至于无法保持磁盘移动
      copyfileobj
      会为您解决这个问题

    因此,这与
    gzip
    工具所做的工作几乎完全相同。但是我们没有创建子进程,也没有依赖可能不存在的工具(例如,在Windows或iOS上,或者在一些非常奇怪的场景中,您创建了一个包含python但没有gzip的chroot)。

    一个
    tar.gz
    文件只是一个
    tar
    文件,它已经被
    gzip
    ped。您必须知道,由于您编写了此Unix命令:

    gzip -c example.tar > example.tar.gz
    
    如果要在Python中执行相同的操作,只需使用库:

    事实上,这直接等同于文档中的一个

    这是最优的吗

    • 我们正在避免使用无故障和柏油部分。这是非常简单的工作(
      tar
      是一种非常简单的格式…),但不是零
    • 显然,我们必须读取tarball的每个字节,并且您必须写入gzip tarball的每个字节,但是我们希望避免一次读取整个文件(这可能会耗尽您所有的RAM),或者一次读取太少以至于无法保持磁盘移动
      copyfileobj
      会为您解决这个问题

    因此,这与
    gzip
    工具所做的工作几乎完全相同。但是我们没有创建子进程,也没有依赖可能不存在的工具(例如,在Windows或iOS上,或者在一些非常奇怪的场景中,您创建了一个包含python但不包含gzip的chroot)。

    我显然错过了您提到的使用示例。这就是我一直在寻找的解决方案,谢谢,我显然错过了你提到的用法示例。这就是我一直在寻找的解决方案,谢谢