備忘録として
S3からのPrefixはデフォルトで1000件までしか取得できないので、1000件以上ある場合はpaginatorを利用する。
import boto3
# Create a client
client = boto3.client('s3', region_name='us-west-2')
# Create a reusable Paginator
paginator = client.get_paginator('list_objects')
# Create a PageIterator from the Paginator
page_iterator = paginator.paginate(Bucket='my-bucket')
for page in page_iterator:
print(page['Contents'])
ドキュメントのデフォルトでは以上の通りで、page_iteratorのリストの中に、1000件ずつのPrefixのリストが格納されています。
それらを扱いやすくするために、展開してしまいます。
import boto3
import itertools
client = boto3.client('s3', region_name='us-west-2')
paginator = client.get_paginator('list_objects')
page_iterator = paginator.paginate(Bucket='my-bucket')
contents = list(itertools.chain.from_iterable(page_iterator))
これで、1000件以上のprefixを扱うことができます