使用Boto3将S3对象作为字符串打开

7 浏览
0 Comments

使用Boto3将S3对象作为字符串打开

我知道在Boto 2中可以使用get_contents_as_string()将S3对象打开为一个字符串。

在boto3中存在一个类似的功能吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

因为在 AWS Lambda 内部使用 Python 2.7 的 .get(),我遇到了从 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):我们升级到了 Python 3,发现 read() 现在返回 bytes,所以如果你想从中获取字符串,你必须使用:

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

0
0 Comments

read会返回字节。至少对于Python 3而言,如果想要返回字符串,就必须使用正确的编码进行解码:

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

0