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