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

如何修改boto3遍历S3桶代码实现指定前缀下的对象遍历

代码修改方法

你只需要给原函数新增prefix入参,在调用list_objects_v2分页器时传入官方原生的Prefix参数即可,该参数会限定仅返回对象键以指定字符串开头的结果,刚好匹配你要遍历特定前缀路径的需求。

修改后的完整代码

import boto3

def iterate_bucket_items(bucket, prefix=''):
    """
    生成器,遍历指定S3存储桶下特定前缀的所有对象

    :param bucket: S3存储桶名称
    :param prefix: 要遍历的对象前缀,默认为空即遍历全桶
    :return: 单个对象的元数据字典
    """
    client = boto3.client('s3')
    paginator = client.get_paginator('list_objects_v2')
    # 传入Prefix参数限定返回的对象前缀
    page_iterator = paginator.paginate(Bucket=bucket, Prefix=prefix)

    for page in page_iterator:
        if page['KeyCount'] > 0:
            for item in page['Contents']:
                yield item


# 调用示例:遍历s3://test-data-lake/test1/test2/路径下的所有对象
# 注意前缀末尾要加斜杠,避免匹配到test1/test2abc这类非目标路径的对象
for i in iterate_bucket_items(bucket='test-data-lake', prefix='test1/test2/'):
    # 如果只需要输出JSON文件,可以加判断:if i['Key'].endswith('.json')
    print(i)

补充说明

  • 前缀参数末尾的斜杠不要省略,否则会把test1/test2_other/、test1/test2file.txt这类前缀匹配的非目标路径内容也查出来
  • 如果你只需要该路径下的JSON文件,可以在遍历时加i['Key'].endswith('.json')的过滤逻辑,筛掉其他后缀的对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:48:03