Télécharger des objets S3 avec Python et Boto 3

Dans cet article, nous montrons des exemples de téléchargement de fichiers et d'images à partir d'un compartiment aws S3 à l'aide de la bibliothèque Python et Boto 3.

Boto est un kit SDK AWS pour Python. Il fournit des fonctions faciles à utiliser qui peuvent interagir avec les services AWS tels que les compartiments EC2 et S3.



Télécharger des objets S3 avec Python et Boto 3

Dans l'exemple suivant, nous téléchargeons un fichier à partir d'un compartiment S3 spécifié.


Nous devons d'abord créer un client S3 en utilisant 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)

Le download_file La méthode prend trois paramètres:


Le premier paramètre est le nom du compartiment dans S3. Le deuxième est le fichier (nom et extension) que nous voulons télécharger et le troisième paramètre est le nom du fichier sous lequel nous voulons enregistrer.



Télécharger tous les objets S3 dans un compartiment spécifié

Dans l'exemple suivant, nous téléchargeons tous les objets dans un compartiment S3 spécifié.

L'extrait de code suppose que les fichiers se trouvent directement à la racine du compartiment et non dans un sous-dossier.

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)


Télécharger tous les objets dans un compartiment S3 de sous-dossier

Le code suivant montre comment télécharger des fichiers qui se trouvent dans un sous-dossier d'un compartiment S3.


Supposons que les fichiers se trouvent dans le compartiment et l'emplacement suivants:

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)

Les références

Documentation Boto 3