我有一个结构如下的tar文件:
example.tar
--file1
--file2
我想将文件另存为tar.gz,这样它看起来就像:
example.tar.gz
--file1
--file2
我尝试在tarfile
模块中使用TarFile.add()
,但我只设法创建了另一个层次结构的tar.gz文件。
我只找到了两个解决方案,这似乎不是最优的:
使用
gzip -c example.tar > example.tar.gz
调用以下Unix命令
在Python中有没有更好的方法呢?
发布于 2018-08-13 06:32:06
tar.gz
文件只是一个经过gzip
ped的tar
文件。鉴于您编写了以下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)
实际上,这直接等同于文档中的一个Examples of Usage。
这是最优的吗?
tar
是一种非常简单的格式…),但不是零,我们显然必须读取压缩文件的每一个字节,你必须写入压缩文件的每一个字节,但我们希望避免一次读取整个文件(这可能会耗尽你的内存),或者一次读取太少,以至于你不能保持磁盘移动。,,
:copyfileobj
会帮你解决这个问题。
因此,这与gzip
工具所做的工作几乎完全相同。但是我们不是在创建子进程,我们也不依赖于一个可能不存在的工具(例如,在Windows上,或者iOS上,或者在一些非常奇怪的场景中,你创建了一个有python但没有gzip的chroot )。
https://stackoverflow.com/questions/51813355
复制相似问题