2015-08-12 16 views

risposta

58

Questo non è nella documentazione di boto3. Questo ha funzionato per me:

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

oggetto essendo un oggetto S3: http://boto3.readthedocs.org/en/latest/reference/services/s3.html#object

+0

assumendo che "Body" contenga dati di stringhe, puoi usare object.get() ["Body"]. Read() per convertire in una stringa di Python. – roehrijn

+11

boto3 ottenere terribile doc, a partire dal 2016. –

+2

http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Object.get ci dice che il valore restituito è un dict, con una chiave "Corpo" di tipo StreamingBody, cercandolo in read the docs ti porta a http://botocore.readthedocs.io/en/latest/reference/response.html che ti dirà di usare read(). – jeffrey

78

read byte tornerà. Almeno per Python 3, se si vuole restituire una stringa, è necessario decodificare usando la giusta codifica:

import boto3 

s3 = boto3.resource('s3') 

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

per far funzionare questa risposta, ho dovuto importare botocore come 'obj.get() ['Body']' è di tipo '' –

+0

@TzunghsingDavidWong non dovresti devo importare un pacchetto per chiamare i metodi su un oggetto esistente, giusto? Era forse solo necessario durante la sperimentazione? –

+1

qual è il valore della chiave nell'oggetto = s3.Object (bucket, key) ** bucket è buckername ?? e chiave è il nome del file ??? *** per favore correggimi se ho torto ... – Amaresh

-2

Se il corpo contiene un io.StringIO, devi fare come di seguito:

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

Ho avuto un problema di lettura/analisi dell'oggetto da S3 a causa di .get() utilizzando Python 2.7 all'interno di un Lambda AWS.

ho aggiunto JSON per l'esempio per mostrare divenne analizzabile :)

import boto3 
import json 

s3 = boto3.client('s3') 

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

NOTA: Il mio scopo è tutto ASCII, quindi non hanno bisogno di .decode('utf-8')

+1

Ha funzionato per me! La documentazione di AWS Boto3 è un disastro – Timo