Baixe objetos S3 com Python e Boto 3

Neste post, mostramos exemplos de como baixar arquivos e imagens de um bucket do aws S3 usando a biblioteca Python e Boto 3.

Boto é um SDK da AWS para Python. Ele fornece funções fáceis de usar que podem interagir com os serviços da AWS, como buckets EC2 e S3.



Baixar objetos S3 com Python e Boto 3

No exemplo a seguir, baixamos um arquivo de um intervalo S3 especificado.


Primeiro, temos que criar um cliente S3 usando boto3.client(s3).

import boto3 BUCKET_NAME = 'my_s3_bucket' BUCKET_FILE_NAME = 'my_file.json' LOCAL_FILE_NAME = 'downloaded.json' def download_s3_file():
s3 = boto3.client('s3')
s3.download_file(BUCKET_NAME, BUCKET_FILE_NAME, LOCAL_FILE_NAME)

O download_file método leva três parâmetros:


O primeiro parâmetro é o nome do intervalo no S3. O segundo é o arquivo (nome e extensão) que queremos baixar e o terceiro parâmetro é o nome do arquivo que queremos salvar.



Baixar todos os objetos S3 em um intervalo especificado

No exemplo a seguir, baixamos todos os objetos em um intervalo S3 especificado.

O trecho de código assume que os arquivos estão diretamente na raiz do intervalo e não em uma subpasta.

import boto3 def download_all_files():
#initiate s3 resource
s3 = boto3.resource('s3')
# select bucket
my_bucket = s3.Bucket('bucket_name')
# download file into current directory
for s3_object in my_bucket.objects.all():
filename = s3_object.key
my_bucket.download_file(s3_object.key, filename)


Baixar todos os objetos em um intervalo S3 de subpasta

O código a seguir mostra como baixar arquivos que estão em uma subpasta em um depósito S3.


Suponha que os arquivos estejam no seguinte intervalo e local:

BUCKET_NAME = 'images'

PATH = pets/cats/

import boto3 import os def download_all_objects_in_folder():
s3_resource = boto3.resource('s3')
my_bucket = s3_resource.Bucket('images')
objects = my_bucket.objects.filter(Prefix='pets/cats/')
for obj in objects:
path, filename = os.path.split(obj.key)
my_bucket.download_file(obj.key, filename)

Referências

Documentação Boto 3