如何在我的 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_blob
在 prefix
中不支持正则表达式。你需要像 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
我的主要问题是, 我想检查 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_blob
在 prefix
中不支持正则表达式。你需要像 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