Фильтр объекта корзины boto s3 с префиксом и разделителем - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть корзина со следующей структурой ключа:

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

И я хотел бы получить список "папок" внутри path.Фактический вариант использования имеет много «подпапок», поэтому мне нужно отфильтровать листинг.В идеале я хочу получить только две записи: to и of.

Используя boto3, я ожидал, что два следующих вызова в основном равны, то есть листинг обоих дает одинаковый результат:

Использование сегмента, возвращаемого ресурсом S3

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с ключом CommonPrefixes, имеющим две записи.

Вопрос: Что мне не хватает?

1 Ответ

0 голосов
/ 26 февраля 2019

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

Причина, по которой он не включен в список возвращаемых объектов, заключается в том, что значения, которые вы ожидаете при использовании разделителя, являются префиксами (например, Europe/,North America) и префиксы не отображаются в интерфейсе ресурса объекта.

...