Python Gzip - 即时附加到文件

时间:2013-08-07 07:23:56

标签: 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()

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

明确指定压缩级别似乎也没有区别。

如果我之后gzip现有的未压缩文件,它的大小将降至大约80kb。

我猜测它不可能动态地“附加”到gzip文件并让它压缩?

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

1 个答案:

答案 0 :(得分:13)

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

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

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

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

相关问题