Используя boto3, я могу получить доступ к своему ковку AWS S3:
s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket-name')
Теперь в ведре содержится папка first-level
, которая сама содержит несколько подпапок с именем timestamp, например 1456753904534
.
Мне нужно знать имя этих подпапок для другой работы, которую я делаю, и мне интересно, могу ли я получить boto3 для них.
Итак, я попробовал:
objs = bucket.meta.client.list_objects(Bucket='my-bucket-name')
который дает словарь, чей ключ "Содержание" дает мне все файлы третьего уровня вместо каталогов временных меток второго уровня, на самом деле я получаю список, содержащий вещи как
{u'ETag ':' "etag" ', u'Key': first-level/1456753904534/part-00014 ', u'LastModified': datetime.datetime(2016, 2, 29, 13, 52, 24, tzinfo = tzutc()),
u'Owner ': {u'DisplayName': 'owner', u'ID ': 'Идентификатор'},
u'Size ': size, u'StorageClass': 'storageclass'}
вы можете видеть, что определенные файлы, в этом случае part-00014
извлекаются, в то время как я хотел бы получить имя каталога в одиночку.
В принципе, я мог бы вырезать имя каталога со всех путей, но это уродливо и дорого, чтобы получить все на третьем уровне, чтобы получить второй уровень!
Я также попытался что-то сообщить здесь:
for o in bucket.objects.filter(Delimiter='/'):
print(o.key)
но я не получаю папки на нужном уровне.
Есть ли способ решить эту проблему?