首页 > 解决方案 > 使用 boto3 过滤 s3 对象,使调用者不过滤

问题描述

我的 s3 存储桶有数千个文件。它们都在同一个“文件夹”中。所以s3前缀是一样的。我想使用 python boto3 来获取包含某个单词的文件名列表。我不希望 boto3 调用发回所有文件名并让客户端过滤掉这些名称。我看到了使用“yield”和“.filter”的例子,但它们正在接收所有文件并使客户端做很多工作。

为了帮助更好地理解,如果我使用 AWS CLI:

aws --profile test s3api list-objects-v2 --bucket mybucket --prefix tmp/ --output json --query "Contents[?contains(Key, 'foobar')]"

但我需要使用 boto3 发送请求,AWS 只需将文件名发送回,其中包含“foobar”。

标签: pythonamazon-web-servicesamazon-s3boto3

解决方案


但我需要使用 boto3 发送请求,AWS 只需将文件名发回,其中包含“foobar”

不能使用常规的 boto3 s3 API 调用来执行此操作,因为这不是该 API 的工作方式。因此,如果您不想先获取所有名称,然后自己将它们过滤掉,那么仅通过单个 boto3 请求就无法实现您想要的。

唯一的帮助可能来自Amazon S3 inventory。因此,您可以请求库存,获取生成的 CSV 文件,然后对其进行过滤。但是您仍然必须自己过滤它。


推荐阅读