19

是否可以使用 Python 即时附加到压缩后的文本文件?

基本上我正在这样做: -

import gzip
content = "Lots of content here"
f = gzip.open('file.txt.gz', 'a', 9)
f.write(content)
f.close()

每 6 秒左右会在文件中附加一行(注意“附加”),但生成的文件与标准未压缩文件一样大(完成后大约 1MB)。

明确指定压缩级别似乎也没有什么不同。

如果我之后 gzip 一个现有的未压缩文件,它的大小会下降到大约 80kb。

我猜它不可能动态“附加”到 gzip 文件并对其进行压缩?

这是写入 String.IO 缓冲区然后在完成后刷新到 gzip 文件的情况吗?

4

1 回答 1

19

这在创建和维护一个有效的 gzip 文件的意义上是有效的,因为 gzip 格式允许串联的 gzip 流。

但是,在您获得糟糕的压缩的意义上,它不起作用,因为您为每个 gzip 压缩实例提供了很少的数据可以使用。压缩依赖于利用以前数据的历史,但这里 gzip 基本上没有给出。

您可以 a) 在调用 gzip 将另一个 gzip 流添加到文件之前累积至少几 K 的数据,许多行,或者 b) 做一些更复杂的事情,附加到单个 gzip 流中,留下一个有效的gzip 流,并允许有效压缩数据。

您可以在 C 中的gzlog.hgzlog.c中找到 b) 的示例。我不相信 Python 具有直接在 Python 中实现 gzlog 所需的所有 zlib 接口,但您可以从 Python 连接到 C 代码。

于 2013-08-07T17:22:34.340 回答