26

私が使用してきた方法は、コレクションをリストに変換し、長さを照会することです。

s3 = boto3.resource('s3')
bucket = s3.Bucket('my_bucket')
size = len(list(bucket.objects.all()))

ただし、これによりコレクション全体の解決が強制され、そもそもコレクションを使用する利点がなくなります。これを行うより良い方法はありますか?

4

3 に答える 3

38

すべてのオブジェクトを一覧表示せずにバケット内のキーの数を取得する方法はありません。これは AWS S3 の制限です ( https://forums.aws.amazon.com/thread.jspa?messageID=164220を参照)。

オブジェクトの概要 (HEAD) を取得しても実際のデータは取得されないため、比較的安価な操作である必要があります。リストを破棄するだけの場合は、次のようにすることができます。

size = sum(1 for _ in bucket.objects.all())

これにより、リストを作成せずにオブジェクトの数が得られます。

于 2015-09-05T03:19:26.693 に答える