提问者:小点点

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


我有一个桶,按键结构如下:

path/to/file1
path/to/file2
path/of/file3
path/of/file4

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

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

使用S3资源返回的bucket

s3 = boto3.resouce('s3')
bucket = s3.Bucket('bucketname')
bucket.objects.filter(Prefix='path/', Delimiter='/').all()

以及底层客户

s3 = boto3.resouce('s3')
s3.meta.client.list_objects(Bucket='path', Prefix='', Delimiter='/')

但是,第一个返回一个emtpy列表,而第二个返回一个JSON,其中通用前缀键具有两个条目。

问题:我错过了什么?


共1个答案

匿名用户

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

未包含在返回的对象列表中的原因是,使用分隔符时期望的值是前缀(例如欧洲/北美),并且前缀没有映射到对象资源接口中。