Python Can';用Boto3不能得到一个桶的总尺寸

Python Can';用Boto3不能得到一个桶的总尺寸,python,amazon-web-services,amazon-s3,boto,boto3,Python,Amazon Web Services,Amazon S3,Boto,Boto3,我想知道一个桶的大小。但是,total_size返回0。当然,桶中有几个文件。如果我的bucket中有五个文件,那么下面的函数将打印五个零。我做错了什么 bucket = boto3.resource('s3', config=Config(signature_version="s3", s3={'addressing_style': 'path'})).Bucket(name) for object in bucket.objects.all(): total_size += obje

我想知道一个桶的大小。但是,total_size返回0。当然,桶中有几个文件。如果我的bucket中有五个文件,那么下面的函数将打印五个零。我做错了什么

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)
我看到几个问题:

  • 不确定您对
    boto3.resource()
    的调用。对吗
  • 总大小
    未初始化
试试这个:

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()])
将签名更改为签名

我也喜欢赫洛夫的回答


还可以指定存储桶的区域,而不是依赖默认配置。

更简单的方法是每天转储对象列表,然后根据该列表计算总数。

我使用的是:

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)

但是你是怎么用boto3的呢?