您应该做的是再次查看 boto3 文档,因为它是您正在寻找的。做您所要求的事情相当简单,但如果您是新手,可能需要阅读一些内容。由于涉及多个步骤,我将尝试引导您朝着正确的方向前进。
在 S3 的 boto3 中,您正在寻找的方法是list_objects_v2()
. 这将为您提供每个对象的“键”或对象路径。您会注意到它将返回每个对象的整个 json blob。由于您只对 Key 感兴趣,因此您可以像访问 dict 中的 Key/Values 一样定位它。例如list_objects_v2()['Contents'][0]['Key']
,应该只返回第一个对象的对象路径。
如果你已经做到了,下一步就是尝试循环并获取所有值。您可以使用 for 循环来执行此操作,或者我经常使用一个很棒的 python 包,称为 jmespath - https://jmespath.org/
以下是如何在一行中检索最多 1000 个对象的所有对象路径。
import jmespath
bucket_name='im-a-bucket'
s3_client = boto3.client('s3')
bucket_object_paths = jmespath.search('Contents[*].Key', s3_client.list_objects_v2(Bucket=bucket_name))
现在,由于您的存储桶可能有超过 1000 个对象,因此您需要使用分页器来执行此操作。看看这个就明白了。
如何使用 list_objects_v2 从 S3 获取超过 1000 个对象?
基本上它的工作方式是只能返回 1000 个对象。为了克服这个问题,我们使用了一个分页器,它允许您返回整个结果并将 1000 的限制视为分页,因此您只需要在 for 循环中也使用它来获取您正在寻找的所有结果。
一旦你为一个存储桶工作,将结果存储在一个类型为 list 的变量中,并为其余的存储桶重复。获得所有这些数据后,您可以轻松地将其复制粘贴到 Excel 工作表中或使用 python 来完成。(尚未测试代码片段,但它们应该可以工作)。