从s3存储桶python中读取按时间排序的所有文件

时间:2019-02-21 14:00:34

标签: python python-3.x amazon-web-services amazon-s3 boto3

我正在尝试按文件上传时间对所有文件内容进行排序,我有以下代码:

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个文件, 我想念什么?

1 个答案:

答案 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

更多详细信息https://alexwlchan.net/2017/07/listing-s3-keys/