如何使用boto3

时间:2016-05-02 20:51:33

标签: python amazon-web-services amazon-s3 boto boto3

执行以下操作:

s3 = boto3.resource('s3')
bucket = s3.Bucket('a_dummy_bucket')
bucket.objects.all()

将返回' a_dummy_bucket'下的所有对象斗,像:

test1/blah/blah/afile45645.zip
test1/blah/blah/afile23411.zip
test1/blah/blah/afile23411.zip
[...] 2500 files
test2/blah/blah/afile.zip
[...] 2500 files
test3/blah/blah/afile.zip
[...] 2500 files

在这种情况下,有没有办法获得' test1',#test;' test3'' test3'等...而不对所有结果进行分页? 为了达到'test2'我需要3个分页调用,每个调用1000个密钥才能知道有一个' test2',然后其他3个有1000个密钥才能到达' test3'等等。

如何在不对所有结果进行分页的情况下获取所有这些前缀?

由于

2 个答案:

答案 0 :(得分:6)

我相信获得Common Prefixes是您可能正在寻找的。使用此示例可以完成此操作:

import boto3

client = boto3.client('s3')
paginator = client.get_paginator('list_objects')
result = paginator.paginate(Bucket='my-bucket', Delimiter='/')
for prefix in result.search('CommonPrefixes'):
    print(prefix.get('Prefix'))

AWS Documentation#Bucket.Get说以下关于共同前缀:

  

只有在指定分隔符时,响应才能包含CommonPrefixes。执行此操作时,CommonPrefixes包含Prefix与分隔符指定的下一个字符串之间的所有键(如果有)。实际上,CommonPrefixes列出了与Prefix指定的目录中的子目录相同的键。例如,如果前缀是notes /并且分隔符是斜杠(/),则在notes / summer / july中,公共前缀是notes / summer /。在计算返回数时,在公共前缀中汇总的所有密钥都计为单个返回。见MaxKeys。

     

类型:字符串

     

祖先:ListBucketResult

答案 1 :(得分:0)

没有办法摆脱分页。您可以指定小于1000的默认页面大小,但不能超过1000.如果您认为分页和查找前缀是混乱的,请尝试使用AWS CLI - 它在内部为您执行所有分页,但只为您提供所需的结果

aws s3 ls s3://a_dummy_bucket/
          PRE test1/
          PRE test2/
          PRE test3/