我正在研究一个Python脚本,该脚本应该处理tarball并输出新脚本,试图保留原始格式。因此,我正在寻找一种方法来查找打开的tarball中使用的压缩方法,以打开具有相同压缩的新方法。
AFAICS TarFile
类不提供任何公共接口来直接获取所需信息。我想避免独立于tarfile模块读取文件。
我目前正在考虑查找底层文件对象的类(t.fileobj.__class__
)或尝试以所有可能的模式打开输入文件,并根据哪一个成功选择正确的格式。
答案 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
等方式打开文件,每次捕获异常?无异常打开的那个会告诉您要复制的压缩类型。