我有一个 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
]
通过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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句