tarfile:确定打开的tarball的压缩

时间:2010-02-12 18:09:07

标签: python tarfile

我正在研究一个Python脚本,该脚本应该处理tarball并输出新脚本,试图保留原始格式。因此,我正在寻找一种方法来查找打开的tarball中使用的压缩方法,以打开具有相同压缩的新方法。

AFAICS TarFile类不提供任何公共接口来直接获取所需信息。我想避免独立于tarfile模块读取文件。

我目前正在考虑查找底层文件对象的类(t.fileobj.__class__)或尝试以所有可能的模式打开输入文件,并根据哪一个成功选择正确的格式。

3 个答案:

答案 0 :(得分:2)

好的,我找到了更好的解决方案。

f = t.fileobj.__class__(newfn, 'w')

答案 1 :(得分:1)

Tar不压缩,它连接(这就是为什么TarFile不会告诉你使用什么压缩方法,因为没有压缩方法)。

您是否想知道它是tar.gz,tar.bz2还是tar.Z?

答案 2 :(得分:1)

打开tarfile时,可以选择模式。来自docs

  

如果mode不适合打开某个(压缩的)文件进行读取,则会引发ReadError。

那么为什么不尝试以.gz.bz2等方式打开文件,每次捕获异常?无异常打开的那个会告诉您要复制的压缩类型。