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

使用boto3调用list_objects_v2无法获取S3存储桶全部文件夹名称求助

问题原因

你的代码只返回存在以/结尾的占位符对象的“文件夹”,但S3中的文件夹本质是虚拟概念——很多时候所谓的“文件夹”只是因为有文件存放在该前缀下(比如folder1/file.jpg),但并没有专门创建folder1/这个占位符对象,这类“文件夹”不会出现在Contents列表里,所以你的代码抓不到。

解决方案

使用S3 API的Delimiter参数来获取前缀,这是官方推荐的获取“文件夹”的方式,它会自动把相同前缀的对象分组,返回所有一级文件夹(不管有没有占位符)。修改后的代码如下:

def get_folders(source_bucket):
    folders = []
    # 确保client是已初始化的boto3客户端
    paginator = client.get_paginator('list_objects_v2')
    # 添加Delimiter='/'参数,按/分组前缀
    pages = paginator.paginate(Bucket=source_bucket, Delimiter='/')
    for page in pages:
        # 提取所有一级文件夹前缀
        if 'CommonPrefixes' in page:
            for prefix in page['CommonPrefixes']:
                folders.append(prefix['Prefix'])
    return folders
递归获取所有层级的文件夹

如果需要获取所有层级的子文件夹,可以用递归方式遍历每个前缀:

def get_all_folders(source_bucket, prefix=''):
    folders = []
    paginator = client.get_paginator('list_objects_v2')
    pages = paginator.paginate(Bucket=source_bucket, Prefix=prefix, Delimiter='/')
    for page in pages:
        if 'CommonPrefixes' in page:
            for common_prefix in page['CommonPrefixes']:
                folder = common_prefix['Prefix']
                folders.append(folder)
                # 递归遍历子文件夹
                folders.extend(get_all_folders(source_bucket, prefix=folder))
    return folders

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:16:00