如何获得没有在boto3中使用低级客户端的CommonPrefixes?

时间:2017-12-01 16:38:20

标签: python-3.x amazon-s3 boto3

根据this answer,可以检索直接"子目录"通过前缀查询,然后获取Client.list_objects()方法结果的CommonPrefix

不幸的是,Client是所谓"低级"的一部分。 API。

我正在使用不同的API:

session = Session(aws_access_key_id=access_key,
                  aws_secret_access_key=secret_key)

s3 = session.resource('s3')
my_bucket = s3.Bucket(bucket_name)
result = my_bucket.objects.filter(Prefix=prefix)

this method does not return dictionary

是否可以在boto3中获得具有更高级别API的公共前缀?

2 个答案:

答案 0 :(得分:1)

您可以从client访问session

session.client('s3').list_objects(Bucket=bucket_name, Prefix= prefix)

答案 1 :(得分:0)

this answer中所述,看来Resource处理得不好Delimiter。当您整个堆栈都依赖于Resource时,常常会感到烦恼,啊,您应该实例化一个Client……

幸运的是,一个Resource对象,例如上面的Bucket,也包含一个client

因此,不要执行代码示例的最后一行,而是执行以下操作:

paginator = my_bucket.meta.client.get_paginator('list_objects')
for resp in paginator.paginate(Bucket=my_bucket.name, Prefix=prefix, Delimiter='/', ...):
    for x in resp.get('CommonPrefixes', []):
        print(x['Prefix'])