带前缀和分隔符的 boto s3 存储桶对象过滤器

ezd*_*ena 5 amazon-s3 amazon-web-services boto3

我有一个具有以下关键结构的存储桶:

path/to/file1
path/to/file2
path/of/file3
path/of/file4
Run Code Online (Sandbox Code Playgroud)

我希望能够获得其中的“文件夹”列表path。实际用例有很多“子文件夹”,所以我需要过滤列表。理想情况下,我只想收到两个条目:toof

使用 boto3,我期望以下两个调用基本相同,即两者的列表产生相同的结果:

使用 S3 资源返回的存储桶

s3 = boto3.resouce('s3')
bucket = s3.Bucket('bucketname')
bucket.objects.filter(Prefix='path/', Delimiter='/').all()
Run Code Online (Sandbox Code Playgroud)

和底层客户端

s3 = boto3.resouce('s3')
s3.meta.client.list_objects(Bucket='path', Prefix='', Delimiter='/')
Run Code Online (Sandbox Code Playgroud)

但是,第一个返回一个空列表,而第二个返回一个 JSON,其中键CommonPrefixes具有两个条目。

问题:我想念什么?

ezd*_*ena 2

来自https://github.com/boto/boto3/issues/134#issuecomment-116766812

它不包含在返回的对象列表中的原因是,当您使用分隔符时期望的值是前缀(例如Europe/North America),并且前缀不会映射到对象资源接口中。