我们在S3中有一个桶中的大量密钥B
,我们需要使用boto
从s3下载它们,然后在python中迭代所有密钥。到目前为止我们找到密钥的唯一方法是调用list()
,它试图立即从B
下载所有密钥,即:
bucket = boto.connect_s3().get_bucket(`B`)
keys = bucket.list()
这总是让我们感到困惑,可能是因为钥匙很多。如果我们获得具有较少总键数的不同存储桶的密钥,或者如果使用前缀,则它可以正常工作。出于项目特定原因,我们希望避免使用存储桶B
的前缀。有没有办法从B
获取所有密钥,但是以块为单位?
答案 0 :(得分:1)
您应该能够将Bucket
对象本身用作生成器,如下所示:
s3 = boto.connect_s3()
bucket = s3.get_bucket('foo')
for key in bucket:
<do stuff with key>
以这种方式使用时,Bucket
对象将在后台为您执行结果分页,并且一次只抓取一页键。