You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从含子文件夹的Google Cloud Storage存储桶中提取文件夹名称

如何从GCS存储桶的Blob路径中提取唯一的文件夹名称?

我们有一个包含子文件夹的Google Cloud Storage(GCS)存储桶,子文件夹下包含文件。目前使用以下Python代码可以列出存储桶中所有Blob的完整路径:

from google.cloud import storage


def list_blobs(bucket_name):
    """Lists all the blobs in the bucket."""
    bucket_name = "my_bucket"

    storage_client = storage.Client()

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

    for blob in blobs:
        print(blob.name)

执行该函数后得到的结果为:

'folder1/data.csv',
 ' folder1/data2.csv',
 ' folder1/data4.csv',
'folder2/data3.csv',
 ' folder2/data5.csv',
 ' folder3/data.csv',

现在希望仅提取唯一的文件夹名称,得到如下输出:

Output :
folder1
folder2
folder3

请问是否可以实现该需求?


当然可以实现,这里提供两种实用方案:

方案一:遍历所有Blob并提取去重

通过处理每个Blob的名称,提取第一个斜杠前的部分作为文件夹名,并用集合自动去重:

from google.cloud import storage

def list_unique_folders(bucket_name):
    storage_client = storage.Client()
    blobs = storage_client.list_blobs(bucket_name)
    unique_folders = set()
    
    for blob in blobs:
        # 跳过无路径分隔符的文件(如果存在)
        if '/' in blob.name:
            folder = blob.name.split('/')[0]
            unique_folders.add(folder)
    
    # 按名称排序后输出
    for folder in sorted(unique_folders):
        print(folder)

# 调用函数,传入你的存储桶名称
list_unique_folders("my_bucket")

说明:

  • 利用集合set()的特性自动去重,确保每个文件夹只出现一次
  • split('/')[0]精准提取Blob路径中的第一级文件夹名称
  • 使用sorted()可以让输出的文件夹名称按字母顺序排列,按需选择

方案二:直接请求GCS获取文件夹前缀(更高效)

如果存储桶中存在明确的文件夹对象(即创建了以/结尾的Blob),可以通过delimiter参数直接向GCS请求文件夹前缀,无需遍历所有文件:

from google.cloud import storage

def list_folders_directly(bucket_name):
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    
    # 设置delimiter='/',让API返回所有第一级文件夹前缀
    blob_iterator = bucket.list_blobs(delimiter='/')
    
    # 遍历前缀并去除末尾的斜杠
    for prefix in blob_iterator.prefixes:
        print(prefix.rstrip('/'))

list_folders_directly("my_bucket")

说明:

  • 这种方法更高效,尤其适合文件数量多的存储桶,减少本地处理的开销
  • list_blobs(delimiter='/')会让GCS API返回所有第一级文件夹的前缀,无需手动拆分路径

内容的提问来源于stack exchange,提问作者Jerry Vfc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:48:22