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

问题描述 投票:0回答:1

如何列出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

我可以提取所有对象名称并在我的应用程序代码中执行此操作,但这似乎效率低下。

python amazon-web-services amazon-s3 delimiter
1个回答
1
投票

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))
© www.soinside.com 2019 - 2024. All rights reserved.