Я пытаюсь найти лучший способ сжать поток с помощью Python zlib
.
У меня есть входной поток, подобный файлу (input
, ниже) и функция вывода, которая принимает файл-подобный (output_function
, ниже):
with open("file") as input:
output_function(input)
И я хотел бы gzip-compress input
chunks перед отправкой их в output_function
:
with open("file") as input:
output_function(gzip_stream(input))
Похоже, что модуль gzip предполагает, что либо вход, либо выход будет gzip'd файлом на диске... Поэтому я предполагаю, что модуль zlib - это то, что я хочу.
Однако он не предлагает простой способ создания потокового файлового типа... И сжатие потока, которое оно поддерживает, осуществляется путем ручного добавления данных в буфер сжатия, а затем очистки этого буфера.
Конечно, я мог бы написать обертку вокруг zlib.Compress.compress
и zlib.Compress.flush
(Compress
возвращается zlib.compressobj()
), но я буду беспокоиться о неправильном размере буфера или о чем-то подобном.
Итак, что самый простой способ создания потоковой передачи, gzip-сжатия файлов с Python?
Изменить. Чтобы пояснить, поток ввода и сжатый выходной поток слишком велики для размещения в памяти, поэтому что-то вроде output_function(StringIO(zlib.compress(input.read())))
действительно не решает проблему.