1
votes

Obtenir un fichier spécifique à partir du compartiment s3 (boto3)

J'ai donc un fichier.csv sur mon bucket 'test', je crée une nouvelle session et je veux télécharger le contenu de ce fichier:

s3 = boto3.client('s3')
obj = s3.get_object(Bucket='test', Key='file.csv')

Cela me renvoie une collection mais y a-t-il un moyen de récupérer le fichier directement? Sans aucune boucle, je veux faire quelque chose comme:

s3.Bucket('test').objects.get(key='file.csv')

Je pourrais obtenir le même résultat sans passer des informations d'identification comme celle-ci:

session = boto3.Session(
aws_access_key_id=KEY,
aws_secret_access_key=SECRET_KEY
)
s3 = session.resource('s3')
obj = s3.Bucket('test').objects.filter(Prefix='file.csv')


0 commentaires

3 Réponses :


1
votes

Si vous regardez la méthode client :

session = boto3.Session(aws_access_key_id=KEY, aws_secret_access_key=SECRET_KEY)
s3 = session.resource('s3')
obj = s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')

et la méthode resource :

import boto3

s3 = boto3.resource('s3')
s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')

vous remarquerez que vous pouvez convertir de la ressource au client avec meta.client . p>

Alors, combinez-le avec votre code pour obtenir:

import boto3

s3_client = boto3.client('s3')
s3_client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')


0 commentaires


0
votes

vous pouvez utiliser la méthode boto3 suivante.

download_file (Bucket, Key, Filename, ExtraArgs = None, Callback = None, Config = Aucun)

s3 = boto3.resource('s3')
s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')

trouver plus de détails ici - download_file ()


0 commentaires