Python Gzip - 即时附加到文件

gen*_*ion 16 python gzip raspberry-pi raspbian

是否可以使用Python动态附加到gzip压缩文本文件?

基本上我这样做: -

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

每隔6秒左右就会在文件中附加一行(注意"附加"),但生成的文件与标准的未压缩文件一样大(完成时大约为1MB).

明确指定压缩级别似乎也没有什么区别.

如果我之后gzip一个现有的未压缩文件,它的大小可以降低到大约80kb.

我猜它不可能动态"附加"到gzip文件并让它压缩?

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

Mar*_*ler 15

这有助于创建和维护有效的gzip文件,因为gzip格式允许连接的gzip流.

但是,在你得到糟糕压缩的意义上它不起作用,因为你给每个gzip压缩实例提供了很少的数据.压缩取决于利用以前数据的历史,但这里gzip基本上没有给出.

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

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