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

2024-04-13

没有直接的方法可以追加到压缩的 tar 存档中。作为文档状态 https://docs.python.org/3/library/tarfile.html#tarfile.open:

注意'a:gz', 'a:bz2' or 'a:xz'不可能。

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

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


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

你可以看看gzlog https://github.com/madler/zlib/blob/master/examples/gzlog.c了解如何有效地将小字符串附加到 gzip 文件。它以未压缩的方式附加它们,直到达到阈值,此时未压缩的数据将被压缩。每次追加后,您都会有一个有效的 gzip 文件。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 tarfile 模块不允许压缩附加? 的相关文章

随机推荐