如何使用 Boto3 列出给定 S3 列表中每个存储桶的对象数?

How can I list the number of objects of each bucket from a given S3 list using Boto3?

我有一个 s3 存储桶列表,每个存储桶中都有一些对象,我正在尝试检索每个存储桶中的对象数量,我被困在这里:

import boto3
client = boto3.client('s3')
bucket_list = [
    'bkt-1',
    'bkt-2',
    'bkt-3'
]

for objs in bucket_list:
    response = client.list_objects_v2(Bucket=bucket_list[0])
    objs = response['KeyCount']
    print(objs)

但看起来它并没有遍历所有列表,它只是给我列表中第一个桶中的对象数量以及我列表中项目数量的相同值,这不是每个桶中的对象数:

4
4
4

当我需要它时:

[
   'bkt-1' 4,
   'bkt-2' 2,
   'bkt-3' 5
]

而不是

client.list_objects_v2(Bucket=bucket_list[0])

应该是

for bucket in bucket_list:
    response = client.list_objects_v2(Bucket=bucket)
    ...

通过在循环中使用 bucket_list[0],您将一遍又一遍地请求第一个存储桶的项目列表。此外,您实际上只询问每个存储桶第一页结果中的项目数。无论桶的大小如何,这都不会超过 1000 个项目。如果你想支持更大的桶,你需要对结果进行正确的分页:

import boto3

client = boto3.client('s3')
# Create a paginator helper for list_objects_v2
paginator = client.get_paginator('list_objects_v2')

bucket_list = [
    'bkt-1',
    'bkt-2',
    'bkt-3'
]

for objs in bucket_list:
    # Keep a running total
    count = 0
    # Work through the response pages, add to the running total
    for page in paginator.paginate(Bucket=objs):
        count += page['KeyCount']
    # Show the bucket name and number of objects
    print(objs, count)