如何使用Python(Boto库)获取Amazon S3存储桶的大小?

6
我希望获取Amazon S3存储桶的大小(以字节为单位和键数)。 我正在寻找一种有效的方法来获取存储桶的大小。
一种可能的方式(并不高效)是:我可以获取存储桶的键列表,并总结每个键的大小。当我有成千上万的键时,这种方法效率低下,因为我必须查找每个键的大小。
是否有任何高效的解决方案??
以下代码不是我要寻找的(因为它不高效):
bucket = conn.get_bucket("bucket_name")
total_size = 0
for key in bucket.list():
   total_size += key.size
2个回答

2

似乎没有直接的调用方法来实现这个。您可以遍历键并进行求和。

bucket = conn.get_bucket(self.container)
size = 0
for key in bucket.list():
   size += key.size

只有在桶中的密钥数量很少且计算不是非常频繁时,才应使用此选项。

请查看此处(不是 Boto)以获取更实用的选项。


我已经尝试过这个解决方案了。它并不高效。我正在寻找一个高效的解决方案。无论如何,谢谢。 - Celik
很遗憾,没有其他方法可以做到这一点。S3 API没有提供这样的机制。 - garnaat

0

我找到了一些代码,可以通过它们获取存储桶中键的数量:

from boto.s3.connection import S3Connection

conn = S3Connection('<aws access key>', '<aws secret key>')
bucket = conn.get_bucket("bucket_name")
number_of_keys = len(bucket.get_all_keys())})

我还需要知道bucket的大小(以字节为单位)吗?

get_all_keys(与名称所示相反)一次只会返回最多1000个键,因此如果存储桶中的键超过了此数量,则会出现故障。 - rschwieb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接