Open S3 object as a string with Boto3

I"m aware that with Boto 2 it"s possible to open an S3 object as a string with: get_contents_as_string()

Is there an equivalent function in boto3 ?

Answer rating: 289

read will return bytes. At least for Python 3, if you want to return a string, you have to decode using the right encoding:

import boto3

s3 = boto3.resource("s3")

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

Answer rating: 134

I had a problem to read/parse the object from S3 because of .get() using Python 2.7 inside an AWS Lambda.

I added json to the example to show it became parsable :)

import boto3
import json

s3 = boto3.client("s3")

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

NOTE (for python 2.7): My object is all ascii, so I don"t need .decode("utf-8")

NOTE (for python 3.6+): We moved to python 3.6 and discovered that read() now returns bytes so if you want to get a string out of it, you must use:

j = json.loads(obj["Body"].read().decode("utf-8"))

Answer rating: 82

This isn"t in the boto3 documentation. This worked for me:

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

object being an s3 object: http://boto3.readthedocs.org/en/latest/reference/services/s3.html#object





Get Solution for free from DataCamp guru