使用 boto3 过滤 s3 对象,以便调用者不过滤

KRi*_*ico 2 python amazon-s3 amazon-web-services boto3

我的 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')]"
Run Code Online (Sandbox Code Playgroud)

但我需要使用 boto3 发送请求,AWS 只需发送回带有“foobar”的文件名。

Mar*_*cin 5

但我需要使用 boto3 发送请求,AWS 只需发送回带有“foobar”的文件名

无法使用常规 boto3 s3 API 调用来执行此操作,因为这不是该 API 的工作方式。所以如果你不想先获取所有的名字,然后自己过滤掉,那么仅仅通过一个boto3请求是没有办法达到你想要的效果的。

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