是否可以使用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文件的情况吗?
答案 0 :(得分:13)
这有助于创建和维护有效的gzip文件,因为gzip格式允许连接的gzip流。
然而,在你得到糟糕压缩的意义上它不起作用,因为你给每个gzip压缩实例提供了很少的数据。压缩取决于利用以前数据的历史,但这里gzip基本上没有。
你可以a)在调用gzip以向文件中添加另一个gzip流之前,累积至少几K的数据,你的许多行,或b)做一些更复杂的数据,附加到单个gzip流,每次都留下一个有效的gzip流,并允许有效压缩数据。
您可以在C gzlog.h和gzlog.c中找到b)的示例。我不相信Python拥有直接在Python中实现gzlog所需的zlib的所有接口,但是你可以从Python接口到C代码。