2015-08-12 1 views

Répondre

58

Ceci n'est pas dans la documentation boto3. Cela a fonctionné pour moi:

object.get()["Body"].read() 

objet étant un objet s3: http://boto3.readthedocs.org/en/latest/reference/services/s3.html#object

+0

En supposant que "Body" contienne des données de chaîne, vous pouvez utiliser object.get() ["Body"]. Read() pour convertir en une chaîne Python. – roehrijn

+11

boto3 obtenir doc terrible, à partir de 2016. –

+2

http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Object.get nous dit que la valeur de retour est un dict, avec une clé "Body" de type StreamingBody, en recherchant cela dans read the docs, vous arriverez à http://botocore.readthedocs.io/en/latest/reference/response.html qui vous dira d'utiliser read(). – jeffrey

78

read retournera octets. Au moins pour Python 3, si vous voulez retourner une chaîne, vous devez décoder en utilisant le bon encodage:

import boto3 

s3 = boto3.resource('s3') 

obj = s3.Object(bucket, key) 
obj.get()['Body'].read().decode('utf-8') 
+0

pour obtenir cette réponse au travail, j'ai dû 'importer botocore' comme' obj.get() ['Body'] 'est de type' ' –

+0

@TzunghsingDavidWong vous ne devriez pas avoir à importer un paquet pour appeler des méthodes sur un objet existant, non? Était-ce seulement nécessaire en expérimentant? –

+1

quelle est la valeur de clé dans le obj = s3.Object (seau, clé) ** seau est buckername ?? et la clé est le nom du fichier ??? *** s'il vous plaît me corriger si je me trompe ... – Amaresh

-2

Si le corps contient une io.StringIO, vous devez faire comme ci-dessous:

object.get()['Body'].getvalue() 
16

J'ai eu un problème pour lire/analyser l'objet à partir de S3 à cause de .get() en utilisant Python 2.7 dans un AWS Lambda.

j'ajouté JSON à l'exemple pour montrer qu'il est devenu analysable :)

import boto3 
import json 

s3 = boto3.client('s3') 

obj = s3.get_object(Bucket=bucket, Key=key) 
j = json.loads(obj['Body'].read()) 

REMARQUE: Mon but est tout ascii, donc je ne ont pas besoin .decode('utf-8')

+1

A travaillé pour moi! La documentation AWS Boto3 est un gâchis – Timo