Я хочу сжать поток и вывести результат. Я делаю это с помощью AWS Lambda, что имеет значение в смысле доступного дискового пространства и других ограничений.
Я собираюсь использовать сжатый поток для записи объекта AWS S3, используя upload_fileobj()
или put()
, если это имеет значение.
Я могу создать архив в виде файла, пока у меня нет маленьких объектов:
import zipfile
zf = zipfile.ZipFile("/tmp/byte.zip", "w")
zf.writestr(filename, my_stream.read())
zf.close()
Для большого количества данных я могу создать объект вместо файла:
from io import BytesIO
...
byte = BytesIO()
zf = zipfile.ZipFile(byte, "w")
....
но как я могу передать сжатый поток на выход? Если я использую zf.close()
- поток будет закрыт, если я его не использую - архив будет неполным.