我正试图获得一个桶的总大小。但是,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)
我看到几个问题:
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()])
将signature_version =“s3”更改为signature_version =“s3v4”。
我也喜欢helloV的回答。
同时指定存储区的区域,而不是依赖于默认配置。
更简单的替代方法是使用Amazon S3 Inventory每天转储对象列表,然后从中计算总计。
我用这个:
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)