example create cli aws python amazon-web-services amazon-s3 boto boto3

create - boto3 python upload to s3



Cómo escribir un archivo o datos en un objeto S3 usando boto3 (5)

Aquí hay un buen truco para leer JSON desde s3:

import json, boto3 s3 = boto3.resource("s3").Bucket("bucket") json.load_s3 = lambda f: json.load(s3.Object(key=f).get()["Body"]) json.dump_s3 = lambda obj, f: s3.Object(key=f).put(Body=json.dumps(obj))

Ahora puede usar json.load_s3 y json.dump_s3 con la misma API que load and dump

data = {"test":0} json.dump_s3(data, "key") # saves json to s3://bucket/key data = json.load_s3("key") # read json from s3://bucket/key

En el boto 2, puede escribir en un objeto S3 utilizando estos métodos:

¿Hay un boto 3 equivalente? ¿Cuál es el método boto3 para guardar datos en un objeto almacenado en S3?


En el boto 3, los métodos ''Key.set_contents_from_'' fueron reemplazados por

Por ejemplo:

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'')

Alternativamente, los datos binarios pueden provenir de la lectura de un archivo, como se describe en los documentos oficiales que comparan boto 2 y boto 3 :

Almacenamiento de datos

Almacenar datos de un archivo, secuencia o cadena es fácil:

# 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''))


Una versión más limpia y concisa que utilizo para cargar archivos sobre la marcha a un cubo y subcarpeta S3 dado

import boto3 BUCKET_NAME = ''sample_bucket_name'' PREFIX = ''sub-folder/'' s3 = boto3.resource(''s3'') # Creating an empty file called "_DONE" and putting it in the S3 bucket s3.Object(BUCKET_NAME, PREFIX + ''_DONE'').put(Body="")

Nota : SIEMPRE debe colocar sus credenciales de AWS ( aws_access_key_id y aws_secret_access_key ) en un archivo separado, por ejemplo- ~/.aws/credentials


Ya no tiene que convertir el contenido a binario antes de escribir en el archivo en S3. El siguiente ejemplo crea un nuevo archivo de texto (llamado newfile.txt) en un depósito S3 con contenido de cadena:

import boto3 s3 = boto3.resource( ''s3'', region_name=''us-east-1'', aws_access_key_id=KEY_ID, aws_secret_access_key=ACCESS_KEY ) content="String content to write to a new S3 file" s3.Object(''my-bucket-name'', ''newfile.txt'').put(Body=content)