AWS S3中的ListObjects操作会因为返回的结果数量而受到限制。默认情况下,每次调用ListObjects操作最多返回1000个对象。但是,可以使用一些技巧来处理更多的对象。例如,使用前缀分隔和分页方式来处理对象列表。
以下是Python代码示例,可以使用分页和前缀分隔实现ListObjects操作的更好重用:
import boto3
def s3_list_objects(bucket_name, prefix):
s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)
paginator = bucket.meta.client.get_paginator('list_objects')
for result in paginator.paginate(Prefix=prefix, Delimiter='/', PaginationConfig={'PageSize': 1000}):
if result.get('CommonPrefixes') is not None:
for subdir in result.get('CommonPrefixes'):
subdir_path = subdir.get('Prefix')
print('subdir_path = {}'.format(subdir_path))
if result.get('Contents') is not None:
for file in result.get('Contents'):
file_path = file.get('Key')
print('file_path = {}'.format(file_path))
s3_list_objects('my_bucket', 'prefix/to/objects/')
此代码使用分页和前缀分隔符参数执行ListObjects,以便按每个目录或前缀处理一组最大数量的对象(最大数量由PageSize参数设置)。通过以这种方式请求对象,可以轻松处理任何数量的对象,避免触发列表命令调用次数过多的错误。