私が使用してきた方法は、コレクションをリストに変換し、長さを照会することです。
s3 = boto3.resource('s3')
bucket = s3.Bucket('my_bucket')
size = len(list(bucket.objects.all()))
ただし、これによりコレクション全体の解決が強制され、そもそもコレクションを使用する利点がなくなります。これを行うより良い方法はありますか?
私が使用してきた方法は、コレクションをリストに変換し、長さを照会することです。
s3 = boto3.resource('s3')
bucket = s3.Bucket('my_bucket')
size = len(list(bucket.objects.all()))
ただし、これによりコレクション全体の解決が強制され、そもそもコレクションを使用する利点がなくなります。これを行うより良い方法はありますか?
すべてのオブジェクトを一覧表示せずにバケット内のキーの数を取得する方法はありません。これは AWS S3 の制限です ( https://forums.aws.amazon.com/thread.jspa?messageID=164220を参照)。
オブジェクトの概要 (HEAD) を取得しても実際のデータは取得されないため、比較的安価な操作である必要があります。リストを破棄するだけの場合は、次のようにすることができます。
size = sum(1 for _ in bucket.objects.all())
これにより、リストを作成せずにオブジェクトの数が得られます。