计算S3存储桶中的密钥

时间:2016-09-12 21:08:15

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

使用下面的boto3库和python代码,我可以遍历S3存储桶和前缀,打印出前缀名称和密钥名称,如下所示:

import boto3
client = boto3.client('s3')

pfx_paginator = client.get_paginator('list_objects_v2')
pfx_iterator = pfx_paginator.paginate(Bucket='app_folders', Delimiter='/')
for prefix in pfx_iterator.search('CommonPrefixes'):
    print(prefix['Prefix'])

    key_paginator = client.get_paginator('list_objects_v2')
    key_iterator = key_paginator.paginate(Bucket='app_folders', Prefix=prefix['Prefix'])
    for key in key_iterator.search('Contents'):
        print(key['Key'])

在密钥循环中,我可以放入一个计数器来计算密钥(文件)的数量,但这是一项昂贵的操作。有没有办法在给定一个桶名和一个前缀的情况下进行一次调用,并返回该前缀中包含的键数(即使它超过1000)?

更新:我发现帖子here显示了使用AWS CLI执行此操作的方法,如下所示:

aws s3api list-objects --bucket BUCKETNAME --prefix "folder/subfolder/" --output json --query "[length(Contents[])]"

有没有办法用boto3 API做类似的事情?

2 个答案:

答案 0 :(得分:0)

您可以使用Bundle Display Name参数进行操作。 对于您的情况:

MaxKeys=1000

通常:

pfx_iterator = pfx_paginator.paginate(Bucket='app_folders', Delimiter='/', MaxKeys=1000)

这将对您便宜1000倍:) Documentation here

答案 1 :(得分:0)

使用 aws cli 很容易计算:

aws s3 ls  <folder url> --recursive --summarize | grep <comment>

例如

aws s3 ls  s3://abc/ --recursive --summarize | grep "Number of Objects"