为什么 tarfile 模块不允许压缩附加?

Why tarfile module does not allow compressed appending?

没有直接的方法来附加到压缩的 tar 存档。作为 documentation states:

Note that 'a:gz', 'a:bz2' or 'a:xz' is not possible.

作为解决方法,您可以使用未压缩的追加模式 'a' 然后自己处理压缩和解压,或者您可以自己处理追加并使用压缩的 read/write 模式重新创建tar存档。

我的问题是:为什么要这么复杂?您有什么理由可以想到为什么开发人员决定不在代码中包含压缩附加模式?

因为这很难,特别是如果您希望它在附加小文件时仍能很好地压缩。

您可以查看 gzlog 以了解如何有效地将小字符串附加到 gzip 文件。它附加未压缩的数据,直到达到阈值,此时未压缩的数据被压缩。每次追加后,您都有一个有效的 gzip 文件。

要使用 tar 文件执行此操作,您还需要跟踪未压缩的 .tar 流中的终止块并覆盖它们,每次都附加新的终止块。

可以做到,但需要特别注意每种压缩数据格式才能正确完成。如果做错了,如果经常使用,结果在时间和压缩比上都会非常低效。