如何列出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
我可以提取所有对象名称并在我的应用程序代码中执行此操作,但这似乎效率低下。
boto3 中的 Amazon S3 页面有 这个示例:
列出 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))