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

如何在Python的S3最新对象下载代码中实现Paginator?

改造代码使用Paginator处理S3大量对象

原来的代码直接调用list_objects_v2会因对象数量超过1000而截断返回结果,用boto3的Paginator可自动处理分页,遍历所有对象。改造后的代码如下:

import boto3

# 初始化S3客户端
s3_client = boto3.client('s3')

# 创建list_objects_v2操作的分页器
paginator = s3_client.get_paginator('list_objects_v2')

# 分页遍历指定存储桶和前缀下的所有对象
page_iterator = paginator.paginate(Bucket='MY-BUCKET', Prefix='foo/')

# 收集所有对象的元数据
all_objects = []
for page in page_iterator:
    # 确保当前页存在对象数据(避免空目录场景报错)
    if 'Contents' in page:
        all_objects.extend(page['Contents'])

# 按最后修改时间排序,取最新的对象
all_objects_sorted = sorted(all_objects, key=lambda obj: obj['LastModified'])
latest_object = all_objects_sorted[-1]['Key']

# 提取文件名(去除前缀路径)
filename = latest_object[latest_object.rfind('/') + 1:]

# 下载文件到当前目录
s3_client.download_file('MY-BUCKET', latest_object, filename)

关键改动说明

  • 用get_paginator('list_objects_v2')创建分页器,替代单次调用list_objects_v2
  • 通过paginate()传入存储桶和前缀参数,获取可遍历的分页迭代器
  • 遍历每一页结果,将对象数据汇总到统一列表,确保覆盖所有超过1000的对象
  • 排序、获取最新对象、下载的逻辑与原代码保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:50:24