Saltar al contenido

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

Solución:

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

  • Object.put ()

  • Client.put_object ()

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

boto3 también tiene un método para cargar un archivo directamente:

s3 = boto3.resource('s3')    
s3.Bucket('bucketname').upload_file('/local/file/here.txt','folder/sub/path/to/s3key')

http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.upload_file

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 de 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)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *