根据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的公共前缀?
答案 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'])