如何遍历S3存储桶中的文件?

库尔特·皮克(Kurt Peek)

我在S3存储桶中存储了大量文件(> 1,000个),并且我想遍历它们(例如,for循环执行)以使用提取数据boto3

但是,我注意到根据http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.list_objects该类list_objects()方法Client最多只能列出1,000个对象:

In [1]: import boto3

In [2]: client = boto3.client('s3')

In [11]: apks = client.list_objects(Bucket='iper-apks')

In [16]: type(apks['Contents'])
Out[16]: list

In [17]: len(apks['Contents'])
Out[17]: 1000

但是,即使有1000多个对象,我也要列出所有对象。我怎样才能做到这一点?

约翰·卡特

如kurt-peek所述,boto3有一个Paginator类,该类使您可以在s3对象的页面上进行迭代,并且可以轻松地用于对页面中的项目进行迭代:

import boto3


def iterate_bucket_items(bucket):
    """
    Generator that iterates over all objects in a given s3 bucket

    See http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.list_objects_v2 
    for return data format
    :param bucket: name of s3 bucket
    :return: dict of metadata for an object
    """


    client = boto3.client('s3')
    paginator = client.get_paginator('list_objects_v2')
    page_iterator = paginator.paginate(Bucket=bucket)

    for page in page_iterator:
        if page['KeyCount'] > 0:
            for item in page['Contents']:
                yield item


for i in iterate_bucket_items(bucket='my_bucket'):
    print i

它将输出如下内容:

{u'ETag': '"a8a9ee11bd4766273ab4b54a0e97c589"',
 u'Key': '2017-06-01-10-17-57-EBDC490AD194E7BF',
 u'LastModified': datetime.datetime(2017, 6, 1, 10, 17, 58, tzinfo=tzutc()),
 u'Size': 242,
 u'StorageClass': 'STANDARD'}
{u'ETag': '"03be0b66e34cbc4c037729691cd5efab"',
 u'Key': '2017-06-01-10-28-58-732EB022229AACF7',
 u'LastModified': datetime.datetime(2017, 6, 1, 10, 28, 59, tzinfo=tzutc()),
 u'Size': 238,
 u'StorageClass': 'STANDARD'}
...

请注意,list_objects_v2建议您使用list_objects以下网址代替https : //docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html

您也可以通过调用做到这一点,在一个较低的水平list_objects_v2(),直接和通过的NextContinuationToken从响应值ContinuationToken,同时isTruncated在响应如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何加载S3存储桶中的zip文件?

如何从S3存储桶中复制文件

遍历具有文件夹结构的S3存储桶中的文件

Amazon S3 boto3如何遍历存储桶中的对象?

如何从Amazon S3存储桶中的文件夹中获取所有文件?

Python:如何从 S3 存储桶下载文件

压缩S3存储桶中的数十亿文件

检查 AWS S3 存储桶中的文件数

将JSON写入S3存储桶中的文件

检查S3存储桶中是否存在文件

Django检索S3存储桶中的文件列表

Amazon S3在版本存储桶中管理文件

从Ansible中的S3存储桶复制文件

从 s3 存储桶中删除文件

无法替换Amazon S3存储桶中的文件

如何从S3存储桶中的文件夹中删除带后缀的图像

如何从 s3 存储桶中获取 Pyspark 中带有前缀的文件?

是否可以使用Python遍历Amazon S3存储桶并计算其文件/密钥中的行数?

如何使用Spark Session列出S3存储桶中的文件?

如何使用python从S3存储桶中读取.txt文件并查看内容?

如何将图像文件从S3存储桶直接读取到内存中?

如何授予Lambda将文件上传到terraform中的s3存储桶的权限?

如何在Django中从S3存储桶下载媒体文件

如何在Amazon s3存储桶中压缩文件并获取其URL

如何使用AWS CLI删除S3存储桶中的多个文件

如何在浏览器中查看 S3 存储桶视频文件

Amazon S3:如何获取存储桶中的文件夹列表?

如何在Amazon S3存储桶中创建新文件夹?

如何将S3存储桶中的所有文件公开?