我试图使用 python 和 boto3 从 S3 存储桶中的文件夹结构中读取文件。
我想返回布尔值,无论报告是否存在于 S3 存储桶中。
import boto3
import json
S3_BUCKET_NAME = ''
KEY = '@@@/%%%.json'
def notification():
report = get_report()
print(report)
def get_report():
s3_client = boto3.client('s3')
response = s3_client.get_object(Bucket=S3_BUCKET_NAME, Prefix=PREFIX, Key=KEY)
data = response['Body'].read()
report = json.loads(data)
return report
Run Code Online (Sandbox Code Playgroud)
如何检查报告是否存在并返回布尔值?
2个回答你的问题:
s3_client = boto3.client('s3')
response = s3_client.get_object(Bucket=S3_BUCKET_NAME, Prefix=PREFIX, Key=KEY)
bytes = response['Body'].read() # returns bytes since Python 3.6+
Run Code Online (Sandbox Code Playgroud)
注意:对于 Python 3.6+read()返回bytes。因此,如果您想从中获取字符串,则必须.decode(charset)对其使用:
pythonObject = json.loads(obj['Body'].read().decode('utf-8'))
Run Code Online (Sandbox Code Playgroud)
例如,要检查报告的可用性,只需S3.Object检索报告并测试key属性即可:
s3_client = boto3.client('s3')
response = s3_client.get_object(Bucket=S3_BUCKET_NAME, Prefix=PREFIX, Key=KEY)
bytes = response['Body'].read() # returns bytes since Python 3.6+
Run Code Online (Sandbox Code Playgroud)
如果所需的报告(具有指定的 KEY)存在,您还可以通过分页和测试迭代存储桶中的所有对象:
pythonObject = json.loads(obj['Body'].read().decode('utf-8'))
Run Code Online (Sandbox Code Playgroud)