我正在尝试按文件上传时间对所有文件内容进行排序,我有以下代码:
s3 = boto3.client('s3')
objs = s3.list_objects_v2(Bucket='my_bucket')['Contents']
[obj['Key'] for obj in sorted(objs, key=get_last_modified)]
但是尽管我有更多的存储空间,但它只给了我1000个文件, 我想念什么?
答案 0 :(得分:2)
list_objects_v2
仅限于前1000个对象。 API响应具有ContinuationToken字段,可以将其传递到ListObjects API以获取下一页结果。通过查找此令牌,并使用它发出另一个请求,我们可以稳定地获取存储桶中的每个键:
"""Get a list of all keys in an S3 bucket."""
keys = []
kwargs = {'Bucket': 'my_bucket'}
while True:
resp = s3.list_objects_v2(**kwargs)
for obj in resp['Contents']:
keys.append(obj['Key'])
try:
kwargs['ContinuationToken'] = resp['NextContinuationToken']
except KeyError:
break