如何在我的 gcp 存储桶对象路径中使用通配符?

How can I use wildcards in my gcp bucket objects path?

我的主要问题是, 我想检查 gcp 中的对象是否存在。所以,我试过的

from google.cloud import storage
client = storage.Client()
path_exists = False
for blob in client.list_blobs('models', prefix='trainedModels/mddeep256_sarim'):
    path_exists = True
    break

对我来说效果很好。 但现在的问题是我不知道模型名称是 mddeep256 但我知道进一步的部分 _sarim

所以,我想使用类似

的东西
for blob in client.list_blobs('models', prefix='trainedModels/*_sarim'):

我想使用 * 通配符,我该怎么做?

简而言之:你不能!

您只能根据前缀进行过滤。如果你想过滤后缀(如你所愿),首先过滤你可以使用 API 的最长前缀,然后在你的代码中迭代以扫描文件名并获得与你的模式匹配的那些.

没有 built-il 解决方案...

list_blobprefix 中不支持正则表达式。你需要像 Guilaume 提到的那样自己过滤。

以下应该有效。

def is_object_exist(bucket_name, object_pattern):
    from google.cloud import storage
    import re
    client = storage.Client()
    all_blobs = client.list_blobs(bucket_name)
    regex = re.compile(r'{}'.format(object_pattern))
    filtered_blobs = [b for b in all_blobs if regex.match(b.name)]
    return True if len(filtered_blobs) else False