如何使用boto3在文件系统样式中检索bucket前缀



执行以下操作:

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

将返回"a_dumy_bucket"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"、"test2"、"test 3"等?为了到达"test2",我需要3个分页调用,每个调用有1000个密钥来知道有一个"test2",然后其他3个调用有1000密钥来到达"test3",依此类推

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

感谢

我相信获得通用前缀可能是您想要的。使用以下示例可以完成:

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文档#Bucket.Get介绍了以下关于通用前缀的内容:

只有在指定了分隔符的情况下,响应才能包含CommonPrefix。当您这样做时,CommonPrefixes包含Prefix和分隔符指定的字符串的下一次出现之间的所有键(如果有)。实际上,CommonPrefixes列出的键与Prefix指定的目录中的子目录类似。例如,如果前缀是notes/,分隔符是斜线(/),那么在notes/summer/7July中,常见前缀是notes/summer/。在计算返回次数时,公共前缀中汇总的所有键都将作为单个返回计数。请参见MaxKeys。

类型:字符串

祖先:ListBucketResult

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

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

最新更新