У меня есть большой локальный файл. Я хочу загрузить gzipped версию этого файла в S3, используя библиотеку boto
. Файл слишком большой, чтобы эффективно загружать его на диск перед загрузкой, поэтому при загрузке он должен быть gzip потоковым способом.
Библиотека boto
знает функцию set_contents_from_file()
, которая ожидает файл-подобный объект, который он будет читать.
Библиотека gzip
знает класс GzipFile
, который может получить объект через параметр с именем fileobj
; он будет записывать этот объект при сжатии.
Я хотел бы объединить эти две функции, но один API хочет читать сам по себе, другой API хочет писать сам по себе; не знает пассивной операции (например, записывается или читается).
Есть ли у кого-нибудь идея о том, как объединить их в рабочем режиме?
EDIT: я принял один ответ (см. ниже), потому что он намекнул мне, куда идти, но если у вас есть такая же проблема, вы можете найти мой собственный ответ (также ниже) более полезным, потому что я реализовал решение с использованием multipart загружает в нее.