如何在我的gcp bucket对象路径中使用通配符



我的主要问题是,我想检查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'):

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

list_blob不支持prefix中的regex。正如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

简而言之:你不能!

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

没有为此构建il解决方案。。。

最新更新