在Boto3中,如何使用其他关键字参数为list_objects创建一个Paginator?

Kur*_*eek 1 python pagination amazon-s3 amazon-web-services boto3

我正在使用a Paginator来迭代S3存储桶的内容(在http://boto3.readthedocs.io/en/latest/guide/paginators.html#creating-paginators之后):

    client = boto3.client('s3')
    paginator = client.get_paginator('list_objects')
    page_iterator = paginator.paginate(Bucket=<my_bucket>)

    for page in page_iterator:
        for object in page['Contents']:
            key = object['Key']
Run Code Online (Sandbox Code Playgroud)

在此示例中,方法名称'list_objects'作为字符串传递.但是,我实际上想使用list_objects带有关键字参数的'partial'函数Prefix="files/",因为我感兴趣的对象位于files/'目录'中(参见http://boto3.readthedocs.io/en/latest/reference /services/s3.html#S3.Client.list_objects).

这可能吗?(从文档中我不清楚如何做到这一点;我可以if key.startswith("files/")在双for循环中做一个,但这似乎不是一个优雅的解决方案).

hel*_*loV 7

你在同一份文件中错过了吗?过滤结果

S3.Paginator.list_objects.paginate()接受一个Prefix参数,用于在将服务器端发送到客户端之前通过前缀服务器端过滤分页结果:

client = boto3.client('s3', region_name='us-west-2')
paginator = client.get_paginator('list_objects')
operation_parameters = {'Bucket': 'my-bucket',
                        'Prefix': 'foo/baz'}
page_iterator = paginator.paginate(**operation_parameters)
for page in page_iterator:
    print(page['Contents'])
Run Code Online (Sandbox Code Playgroud)