Как получить папки верхнего уровня в корзине S3, используя boto3? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть корзина S3 с несколькими папками верхнего уровня и сотнями файлов в каждой из этих папок.Как получить имена этих папок верхнего уровня?

Я пробовал следующее:

s3 = boto3.resource('s3', region_name='us-west-2', endpoint_url='https://s3.us-west-2.amazonaws.com')
bucket = s3.Bucket('XXX')

for obj in bucket.objects.filter(Prefix='', Delimiter='/'):
    print obj.key

Но, похоже, это не работает.Я думал об использовании регулярных выражений для фильтрации всех имен папок, но это кажется неэффективным по времени.

Заранее спасибо!

Ответы [ 3 ]

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

Попробуйте это.

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'))
0 голосов
/ 24 февраля 2019

Вы также можете использовать Amazon Athena для анализа / запроса сегментов S3.

https://aws.amazon.com/athena/

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

Модель данных Amazon S3 представляет собой плоскую структуру: вы создаете контейнер, а контейнер хранит объекты.Нет иерархии вложенных или вложенных папок;однако вы можете вывести логическую иерархию, используя префиксы и разделители имен ключей, как это делает консоль Amazon S3 ( source )

Другими словами, нет способа обойти все ключив ведре и извлечении любой структуры, которую вы хотите видеть (в зависимости от ваших потребностей, хороший выбор может быть хорошим подходом для вас).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...