如何使用python从S3存储桶中的文件夹中读取文件的内容?

1 python amazon-s3 boto3

我试图使用 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)

如何检查报告是否存在并返回布尔值?

hc_*_*dev 5

2个回答你的问题:

  1. 如何使用python从S3存储桶中的文件夹中读取文件的内容?
  2. 如何检查报告是否存在并返回布尔值?

获取S3对象

S3-对象作为字节

    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-对象作为字符串

请参阅使用 Boto3 以字符串形式打开 S3 对象

检查 S3 对象是否存在

例如,要检查报告的可用性,只需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)