Boto 2では、次のようにしてS3オブジェクトを文字列として開くことができることを知っています。 get_contents_as_string()
boto3に同等の関数はありますか?
Boto 2では、次のようにしてS3オブジェクトを文字列として開くことができることを知っています。 get_contents_as_string()
boto3に同等の関数はありますか?
回答:
read
バイトを返します。少なくともPython 3では、文字列を返したい場合は、正しいエンコーディングを使用してデコードする必要があります。
import boto3
s3 = boto3.resource('s3')
obj = s3.Object(bucket, key)
obj.get()['Body'].read().decode('utf-8')
import botocore
そのままobj.get()['Body']
のタイプにしなければなりませんでした<class 'botocore.response.StreamingBody'>
.get()
AWS Lambda内でPython 2.7 を使用しているため、S3からのオブジェクトの読み取り/解析に問題がありました。
例にjsonを追加して、解析可能になったことを示します:)
import boto3
import json
s3 = boto3.client('s3')
obj = s3.get_object(Bucket=bucket, Key=key)
j = json.loads(obj['Body'].read())
注(Python 2.7の場合):私のオブジェクトはすべてASCIIなので、必要ありません .decode('utf-8')
注(python 3.6+の場合):python 3.6に移動し、文字列を取得したい場合read()
は次のbytes
ように戻ることがわかりました。
j = json.loads(obj['Body'].read().decode('utf-8'))
これはboto3のドキュメントにはありません。これは私のために働きました:
object.get()["Body"].read()
s3オブジェクトであるオブジェクト:http : //boto3.readthedocs.org/en/latest/reference/services/s3.html#object
get expected at least 1 arguments, got 0
。を削除しget()
、「Body」オブジェクトプロパティに直接アクセスします
Python3 + boto3 APIアプローチの使用。
使用してS3.Client.download_fileobjのAPIとPythonのファイルのようなオブジェクトを、S3オブジェクトコンテンツは、メモリに取得することができます。
取得したコンテンツはバイトであるため、strに変換するには、デコードする必要があります。
import io
import boto3
client = boto3.client('s3')
bytes_buffer = io.BytesIO()
client.download_fileobj(Bucket=bucket_name, Key=object_key, Fileobj=bytes_buffer)
byte_value = bytes_buffer.getvalue()
str_value = byte_value.decode() #python3, default decoding is utf-8