list_blobs_with_prefix() 的带前缀参数的正则表达式

Regex with Prefix parameter for list_blobs_with_prefix()

我正在尝试使用 python api 客户端从带有前缀的 gcp 存储中获取对象,但前缀参数出现问题。我可以在 gsutil 中使用

gsutil ls -h gs://{{bucket-name}}/*/latest/

但是 python api

我正在使用文档中的函数。 尝试将前缀参数传递为

*/latest/ /*/latest *

并让定界符为 none.Still 没有得到任何结果。

    storage_client = storage.Client()

    # Note: Client.list_blobs requires at least package version 1.17.0.
    blobs = storage_client.list_blobs(bucket_name, prefix=prefix,
                                      delimiter=delimiter)

    print('Blobs:')
    for blob in blobs:
        print(blob.name)

    if delimiter:
        print('Prefixes:')
        for prefix in blobs.prefixes:
            print(prefix)

预期输出是

gs://{{bucket-name}}/product/latest/:
gs://{{bucket-name}}/product/latest/health
gs://{{bucket-name}}/product/latest/index.html

gsutil 知道正则表达式,但 GCS API 本身不知道。 API 仅支持文字前缀。

相反,您需要自己获取所有内容并使用正则表达式进行过滤,这就是 gsutil 在您的示例中所做的。

all_blobs = storage_client.list_blobs(bucket_name)
regex = re.compile(r'.*/latest/.*')
blobs = filter(regex.match, all_blobs)

如果您要拥有太多对象而不值得这样做,我建议以一种允许您在路径开头放置非通配符匹配项的方式重新组织您的数据,以便您可以过滤服务器-side.