【发布时间】:2013-08-08 11:00:54
【问题描述】:
是否可以使用 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 文件的情况吗?
【问题讨论】:
-
为了使 gzip 算法有效地工作,它必须掌握要压缩的整个内容。否则,您只是在附加大量彼此无关的 gzip 压缩内容。
-
@Nadh 所以我猜我的最后一行是正确的?写入 String.IO 并刷新到 gzip ?
-
是的,应该可以。您只需要确保所有内容在任何时候都被压缩在一起。
-
我依稀记得zlib可以用来进行流式压缩,即不用提前看到所有数据。
-
问题是一次只追加一行数据。要使 gzip 有效地工作,它至少需要一次 一些 数据量 --- 不一定是整个文件,但肯定不止一行。如果一次发送整个文件太多,您也可以发送 16KB 之类的。
标签: python gzip raspberry-pi raspbian