首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用Python在flat tar.gz中保存tar文件

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

Stack Overflow用户
提问于 2018-08-13 06:27:44
回答 1查看 166关注 0票数 0

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

代码语言:javascript
复制
example.tar
--file1
--file2

我想将文件另存为tar.gz,这样它看起来就像:

代码语言:javascript
复制
example.tar.gz
--file1
--file2

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

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

使用

  1. “Unix”该文件,然后将它们放入一个新的"tar.gz“文件中
  2. 从Python脚本gzip -c example.tar > example.tar.gz

调用以下Unix命令

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-13 06:32:06

tar.gz文件只是一个经过gzipped的tar文件。鉴于您编写了以下Unix命令,您必须知道:

代码语言:javascript
复制
gzip -c example.tar > example.tar.gz

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

代码语言:javascript
复制
with open('example.tar', 'rb') as inf, gzip.open('example.tar.gz', 'wb') as outf:
    shutil.copyfileobj(inf, outf)

实际上,这直接等同于文档中的一个Examples of Usage

这是最优的吗?

  • 我们避免了去焦油和涂焦油的部分。这是非常简单的工作(tar是一种非常简单的格式…),但不是零,我们显然必须读取压缩文件的每一个字节,你必须写入压缩文件的每一个字节,但我们希望避免一次读取整个文件(这可能会耗尽你的内存),或者一次读取太少,以至于你不能保持磁盘移动。,

copyfileobj会帮你解决这个问题。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51813355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档