Я пытаюсь найти лучший способ сжать поток с помощью 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()))) действительно не решает проблему.