Python の でストリームを圧縮する最良の方法を見つけようとしていますzlib
。
私は、ファイルのような入力ストリーム (下の ) と、ファイルのような (下の )input
を受け入れる出力関数を持っています。output_function
with open("file") as input:
output_function(input)
input
そして、チャンクをに送信する前に gzip 圧縮したいと思いますoutput_function
:
with open("file") as input:
output_function(gzip_stream(input))
gzipモジュールは、入力または出力のいずれかがディスク上のgzipされたファイルであると想定しているように見えます。
ただし、ストリーム ファイルのようなものを作成する簡単な方法をネイティブに提供するわけではありません。また、サポートするストリーム圧縮は、手動でデータを圧縮バッファーに追加し、そのバッファーをフラッシュすることによって実現されます。
もちろん、zlib.Compress.compress
and zlib.Compress.flush
( Compress
is returned by zlib.compressobj()
) の周りにラッパーを書くこともできますが、バッファ サイズが間違っていたり、似たようなことが起きたりするのではないかと心配です。
では、Python を使用して gzip 圧縮のようなストリーミング ファイルを作成する最も簡単な方法は何でしょうか?
編集:明確にするために、入力ストリームと圧縮された出力ストリームはどちらも大きすぎてメモリに収まらoutput_function(StringIO(zlib.compress(input.read())))
ないため、実際には問題を解決できません。