Dans boto 3, les méthodes 'Key.set_contents_from_' ont été remplacées par
Par exemple:
import boto3
some_binary_data = b'Here we have some data'
more_binary_data = b'Here we have some more data'
# Method 1: Object.put()
s3 = boto3.resource('s3')
object = s3.Object('my_bucket_name', 'my/key/including/filename.txt')
object.put(Body=some_binary_data)
# Method 2: Client.put_object()
client = boto3.client('s3')
client.put_object(Body=more_binary_data, Bucket='my_bucket_name', Key='my/key/including/anotherfilename.txt')
Alternativement, les données binaires peuvent provenir de la lecture d'un fichier, comme décrit dans la documentation officielle comparant boto 2 et boto 3 :
Stocker des données
Le stockage de données à partir d'un fichier, d'un flux ou d'une chaîne est facile:
# Boto 2.x
from boto.s3.key import Key
key = Key('hello.txt')
key.set_contents_from_file('/tmp/hello.txt')
# Boto 3
s3.Object('mybucket', 'hello.txt').put(Body=open('/tmp/hello.txt', 'rb'))
s3.Object().put()
je me retrouve avec un objet avec zérocontent-length
. Pour moi,put()
n'accepte que les données de chaîne, maisput(str(binarydata))
semble avoir des problèmes d'encodage. Je me retrouve avec un objet d'environ 3 fois la taille des données d'origine, ce qui le rend inutile pour moi.boto3 a également une méthode pour télécharger un fichier directement:
http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.upload_file
la source
s3.Bucket(...).upload_fileobj()
méthode à la place.Vous n'avez plus besoin de convertir le contenu en binaire avant d'écrire dans le fichier dans S3. L'exemple suivant crée un nouveau fichier texte (appelé newfile.txt) dans un compartiment S3 avec un contenu de chaîne:
la source
prefix
dans ce cas? Signification, que faire si vous souhaitez stocker le fichiermy-bucket-name/subfolder/
?Voici une belle astuce pour lire JSON à partir de s3:
Vous pouvez maintenant utiliser
json.load_s3
etjson.dump_s3
avec la même API queload
etdump
la source
...["Body"].read().decode('utf-8')
.Une version plus claire et concise que j'utilise pour télécharger des fichiers à la volée dans un compartiment et un sous-dossier S3 donnés -
Remarque : vous devez TOUJOURS mettre vos informations d'identification AWS (
aws_access_key_id
etaws_secret_access_key
) dans un fichier séparé, par exemple-~/.aws/credentials
la source
~
C:\Users\username\.aws\credentials
il convient de mentionner smart-open qui utilise
boto3
comme back-end.smart-open
est un remplacement pour son python drop-inopen
qui peut ouvrir des fichiers à partirs3
, ainsi queftp
,http
et bien d' autres protocoles.par exemple
Les informations d'identification aws sont chargées via les informations d'identification boto3 , généralement un fichier dans le répertoire
~/.aws/
ou une variable d'environnement.la source
Vous pouvez utiliser le code ci-dessous pour écrire, par exemple une image sur S3 en 2019. Pour pouvoir vous connecter à S3, vous devrez installer l'AWS CLI à l'aide de la commande
pip install awscli
, puis entrer quelques informations d'identification à l'aide de la commandeaws configure
:la source