使用Boto3无法获得桶的总大小

问题描述 投票:2回答:4

我正试图获得一个桶的总大小。但是,total_size返回0.当然,存储桶中有几个文件。如果我的存储桶中有五个文件,则以下功能会打印五个零。我究竟做错了什么?

bucket = boto3.resource('s3', config=Config(signature_version="s3", s3={'addressing_style': 'path'})).Bucket(name)
for object in bucket.objects.all():
    total_size += object.size
    print(object.size)
python amazon-web-services amazon-s3 boto boto3
4个回答
5
投票

我看到几个问题:

  • 不确定你打电话给boto3.resource()。那是对的吗?
  • total_size没有初始化

试试这个:

total_size = 0
bucket = boto3.resource('s3').Bucket('mybucket')
for object in bucket.objects.all():
  total_size += object.size
  print(object.size)
print(total_size)

或者一个班轮:

sum([object.size for object in boto3.resource('s3').Bucket('mybucket').objects.all()])

1
投票

将signature_version =“s3”更改为signature_version =“s3v4”。

我也喜欢helloV的回答。

同时指定存储区的区域,而不是依赖于默认配置。


1
投票

更简单的替代方法是使用Amazon S3 Inventory每天转储对象列表,然后从中计算总计。


0
投票

我用这个:

s3client = boto3.client('s3', region_name=region,
                            aws_access_key_id=access_key,
                            aws_secret_access_key=secret_key)
response = s3client.list_objects(Bucket=bucket_name)['Contents']
bucket_size = sum(obj['Size'] for obj in response)
© www.soinside.com 2019 - 2024. All rights reserved.