如何在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
相关产品推荐
相关产品推荐

