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')
3 Réponses :
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')
J'aime Cela fait comme ça: Pour l'authentification, je recommande d'utiliser des variables d'environnement. Voir boto3: Configurer les informations d'identification pour plus de détails. p> mpu.aws.s3_download
a >, mais je suis biaisé ;-) import os
import boto3
def s3_download(bucket_name, key, profile_name, exists_strategy='raise'):
session = boto3.Session(profile_name=profile_name)
s3 = session.resource('s3')
if os.path.isfile(destination):
if exists_strategy == 'raise':
raise RuntimeError('File \'{}\' already exists.'
.format(destination))
elif exists_strategy == 'abort':
return
s3.Bucket(bucket_name).download_file(key, destination)
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 ()