我正在研究一个 Python 脚本,该脚本应该处理一个 tarball 并输出新的,试图保持原始格式。因此,我正在寻找一种方法来查找打开的压缩包中使用的压缩方法,以打开具有相同压缩的新压缩包。
AFAICSTarFile
类不提供任何公共接口来直接获取所需信息。而且我想避免独立于 tarfile 模块读取文件。
我目前正在考虑查找底层文件对象 ( t.fileobj.__class__
) 的类或尝试以所有可能的模式打开输入文件并根据成功的模式选择正确的格式。
好的,我找到了更好的解决方案。
f = t.fileobj.__class__(newfn, 'w')
Tar 不压缩,它连接(这就是为什么 TarFile 不会告诉您使用哪种压缩方法,因为没有一种)。
您是否想知道它是 tar.gz、tar.bz2 还是 tar.Z?
打开 tarfile 时,您可以选择模式。从文档:
如果模式不适合打开某个(压缩)文件进行读取,则会引发 ReadError。
那么为什么不尝试以 . 等方式打开文件.gz
,.bz2
每次都捕获异常呢?无异常打开的会告诉您要复制的压缩类型。