k4m454k
@k4m454k
Sysadmin, QA, DroneGuru

Как получить один файл из ZIP архива на s3 (boto3 + python)?

На Amazon S3 хранится zip. Большой. Скачать его весь нет возможности. Нужно из него получить один маленький файл xml в память (да, его можно и не качать, нужно только содержимое). Как это можно сделать средствами python + boto3 + zipfile + io + может ещё что-то.
Нужно открыть соединение к этому файлу через Бото в потоке или скачать его кусками. и прогнать через zipfile, получить где именно хранится нужный мне файл, и скачать и раззипить нужный кусок.

conn = S3Connection(a,b)
bucket = conn.get_bucket(bucket)
key = bucket.get_key(key_path)
byte_block = key.get_contents_as_string(headers={'Range': 'bytes=22000-23000'})

Так можно выудить кусок файла... это я уже понял.... Но может это не правильное решение?
  • Вопрос задан
  • 624 просмотра
Пригласить эксперта
Ответы на вопрос 2
Был похожий вопрос:
Можно ли извлечь файл из архива zip по SMB?
Я думаю, суть ясна.

А извлечь один-единственный файл можно при помощи Info-zip unzip таким образом при помощи ключа -p:
unzip -p /mnt/s3/mybucket/myfile.zip SOMEFILE > SOMEFILE_content

То есть всё это нехитрое дело можно завернуть в Bash и там перенаправлять вывод куда нужно.
Ответ написан
inoise
@inoise Куратор тега Amazon Web Services
Solution Architect, AWS Certified, Serverless
Не скачивая файл нельзя это сделать по тому как s3 это не файловое, а объектное хранилице. То есть не block storage.

Для вашего решения вы можете поднять EC2 инстанс в том же регионе, скачать zip-архив на него, там распаковать и загрузить обратно нужную часть на s3 чтобы скачать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы