如何列出S3存储桶分隔符路径?
基本上,我想列出s3存储桶中的所有“目录”和/或“子目录”。我知道这些实际上并不存在。基本上,我希望所有包含定界符的对象,然后只返回定界符之前的键路径。以前缀开头会更好,但在存储桶级别就足够了。
示例S3存储桶:
root.json
/2018/cats/fluffy.png
/2018/cats/gary.png
/2018/dogs/rover.png
/2018/dogs/jax.png
然后我想做类似的事情:
s3_client = boto3.client('s3')
s3_client.list_objects(only_show_delimiter_paths=True)
结果
/2018/
/2018/cats/
/2018/dogs/
我看不出有什么办法可以使用https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.list_objects
我可以提取所有对象名称,并在我的应用程序代码中执行此操作,但这似乎效率很低。
答案 0 :(得分:0)
boto3中的Amazon S3页面具有this example:
列出Amazon S3存储桶中的顶级通用前缀
此示例显示如何列出Amazon S3存储桶中的所有顶级通用前缀:
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'))
但是,它仅显示顶级前缀。
因此,这是一些代码来打印所有“文件夹”:
import boto3
client = boto3.client('s3')
objects = client.list_objects_v2(Bucket='my-bucket')
keys = [o['Key'] for o in objects['Contents']]
folders = {k[:k.rfind('/')+1] for k in keys if k.rfind('/') != -1}
print ('\n'.join(folders))