在boto3中过滤类似球形的正则表达式模式

leo*_*yin 5 glob boto3

我可以使用boto3的筛选器工具在存储桶中查找类似于glob目录中文件的键(技术上是子键)吗?

我想获取具有这样的模式的键列表"key/**/<pattern>/**.gz"

gar*_*aat 9

不幸的是没有。S3 不提供对结果过滤的服务器端支持(除了通过前缀和分隔符)。


Al *_*hri 7

您可以使用exrex库根据正则表达式生成所有字符串并将其传递给 boto3。这是一个简单的示例,但您可以想象更复杂的情况:

例如:

import exrex
import boto3
session = boto3.Session() # profile_name='xyz'
s3 = session.resource('s3')
bucket = s3.Bucket('mybucketname')

prefixes = list(exrex.generate(r'api/v2/responses/2016-11-08/(2016-11-08T2[2-3]|2016-11-09)'))

objects = []
for prefix in prefixes:
    print(prefix, end=" ")
    current_objects = list(bucket.objects.filter(Prefix=prefix))
    print(len(current_objects))
    objects += current_objects
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

api/v2/responses/2016-11-08/2016-11-08T22 1056
api/v2/responses/2016-11-08/2016-11-08T23 1056
api/v2/responses/2016-11-08/2016-11-09 24677
Run Code Online (Sandbox Code Playgroud)