python - 使用 Boto3 按键列表下载 S3 对象

标签 python amazon-web-services amazon-s3 boto3

我有一个从缓存中检索的 key 列表,我想从 S3 下载关联的对象(文件),而不必为每个 key 发出请求。

假设我有以下键数组:

key_array = [
    '20160901_0750_7c05da39_INCIDENT_MANIFEST.json',
    '20161207_230312_ZX1G222ZS3_INCIDENT_MANIFEST.json',
    '20161211_131407_ZX1G222ZS3_INCIDENT_MANIFEST.json',
    '20161211_145342_ZX1G222ZS3_INCIDENT_MANIFEST.json',
    '20161211_170600_FA68T0303607_INCIDENT_MANIFEST.json'
]

我正在尝试做类似于 this answer 的事情在另一个 SO 问题上,但像这样修改:

import boto3

s3 = boto3.resource('s3')

incidents = s3.Bucket(my_incident_bucket).objects(key_array)

for incident in incidents:
    # Do fun stuff with the incident body
    incident_body = incident['Body'].read().decode('utf-8')

我的最终目标是避免为列表中的每个键分别访问 AWS API。我还想避免必须拉下整个存储桶并过滤/迭代完整结果。

最佳答案

我认为您将获得的最好结果是 n 个 API 调用,其中 n 是您的 key_array 中的键数。用于 s3 的亚马逊 API 没有提供太多基于键的服务器端过滤方式,除了前缀。以下是在 n API 调用中获取它的代码:

import boto3
s3 = boto3.client('s3')

for key in key_array:
    incident_body = s3.get_object(Bucket="my_incident_bucket", Key=key)['Body']

    # Do fun stuff with the incident body

关于python - 使用 Boto3 按键列表下载 S3 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41514922/

相关文章:

Java 相当于 Python 中的函数映射

amazon-web-services - 模板错误:每个 Fn::Sub 对象的上下文对象的每个值都必须是字符串或返回字符串的函数

python - 在触发的 Lambda 函数中获取 Amazon Web Services Codecommit 存储库的名称

python - 随机合并两个列表中的两个元素

Python 名称错误 : global name 'assertEqual' is not defined

amazon-web-services - 根域上的 AWS 证书

amazon-web-services - .csv 上传在 Amazon Web Services 机器学习中不起作用 - AWS

javascript - 通过亚马逊S3的间接ajax请求

machine-learning - 数据集在循环变量列表时抛出 KeyError

ios - 在 Swift 中获取 No such module 'AWSS3'