首页 > 解决方案 > 如何使用 Python 将 tar 文件保存在平面 tar.gz 中

问题描述

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

example.tar
--file1
--file2

我想将文件保存为 tar.gz,所以它看起来像:

example.tar.gz
--file1
--file2

我尝试TarFile.add()tarfile模块中使用,但我只设法创建具有另一个层次结构的 tar.gz 文件。

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

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

在 Python 中有没有更好的方法?

标签: pythongziptar

解决方案


tar.gz文件只是targzipped的文件。鉴于您编写了这个 Unix 命令,您必须知道:

gzip -c example.tar > example.tar.gz

如果你想在 Python 中做同样的事情,只需使用该gzip库:

with open('example.tar', 'rb') as inf, gzip.open('example.tar.gz', 'wb') as outf:
    shutil.copyfileobj(inf, outf)

事实上,这直接等同于文档中的使用示例之一。

这是最优的吗?

  • 我们正在避免去焦油和涂焦油的部分。这是非常少的工作(tar是一种非常简单的格式......),但不是零。
  • 我们显然必须读取 tarball 的每个字节,并且您必须写入 gzip 压缩的 tarball 的每个字节,但我们希望避免一次读取整个文件(这可能会耗尽您的所有 RAM)或一次读取这么少你不能保持磁盘移动。copyfileobj为你处理好。

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


推荐阅读