Python Gzip - 即时附加到文件

标签 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 文件的情况吗?

最佳答案

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

然而,它在您获得糟糕压缩的意义上不起作用,因为您为每个 gzip 压缩实例提供的数据非常少。压缩取决于利用先前数据的历史记录,但这里基本上没有提供 gzip。

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

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

关于Python Gzip - 即时附加到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18097107/

相关文章:

Python:在不使用迭代的情况下将for循环操作扩展到矩阵中的每一行

Python HTML 解析器 : UnicodeDecodeError

python - 如何从 python 中损坏的 gzip 文件中提取数据

php - Mysql 出现套接字故障

audio - 仅播放来自 youtube-dl 的 M3U8 文件中的音频 ts 流

Python的列表理解和其他更好的实践

python - 删除 python 列表中的项目

linux - zgrep 在搜索之前是否解压缩文件?

python - 如何在不在 python 中提取 gz 文件的情况下列出它的内容?

python - WIFI Pineapple Nano 和 RPi GPIO