Python 如何列出S3存储桶分隔符路径

Python 如何列出S3存储桶分隔符路径,python,amazon-s3,delimiter,Python,Amazon S3,Delimiter,如何列出S3存储桶分隔符路径? 基本上,我想列出s3存储桶中的所有“目录”和/或“子目录”。我知道这些根本不存在。基本上,我想要所有包含分隔符的对象,然后只返回分隔符之前的键路径。在前缀下开始会更好,但在bucket级别就足够了 示例S3存储桶: root.json /2018/cats/fluffy.png /2018/cats/gary.png /2018/dogs/rover.png /2018/dogs/jax.png 然后我想做一些类似的事情: s3_client = boto3.c

如何列出S3存储桶分隔符路径?

基本上,我想列出s3存储桶中的所有“目录”和/或“子目录”。我知道这些根本不存在。基本上,我想要所有包含分隔符的对象,然后只返回分隔符之前的键路径。在前缀下开始会更好,但在bucket级别就足够了

示例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/
我看不到任何方法可以通过以下方式在本地实现:


我可以提取所有的对象名,并在我的应用程序代码中这样做,但这似乎效率低下

boto3中的Amazon S3页面具有:

列出Amazon S3 bucket中的顶级常用前缀

此示例显示如何列出Amazon S3存储桶中的所有顶级通用前缀:

但是,它只显示顶级前缀

下面是一些打印所有“文件夹”的代码:

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))

我在寻找获取顶级钥匙的简单方法;这对我来说非常合适。但我想确认一下,如果我有超过1000条记录,这一切都会好的。。。还有一种方法可以打印前缀而不打印/例如,顶层打印入站/出站/测试/。。。。但我想把它们打印成一个列表【入站、出站、测试】@Moe请创建一个新问题,而不是通过对旧问题的评论提问。
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))