boto3 перечисляет ТОЛЬКО каталоги в корзине

#python #amazon-web-services #amazon-s3 #boto3

Вопрос:

У меня есть набор данных в корзине s3, который находится в формате:

 s3://bucket-name/<hash_0>/image.jpg
s3://bucket-name/<hash_0>/data.json
s3://bucket-name/<hash_1>/image.jpg
s3://bucket-name/<hash_1>/data.json
 

В котором каждый <hash_i> представляет «точку данных», содержащую изображение и файл json.

Я пытаюсь выполнить итерацию по корзине, но мне нужно выполнить итерацию только по каталогам, так как имена файлов json и изображений известны заранее.

То, что я сейчас делаю, это:

 s3 = boto3.client('s3', region_name='us-east-1')
paginator = s3.get_paginator('list_objects_v2')
pages = paginator.paginate(Bucket="dataset")
for page in pages:
    for obj in page['Contents']:
        logging.info(f"{obj=}")
 

Все, что мне было нужно, — это ведро.команда ls или параметр max_depth в функции разбиения на страницы. Как я мог бы сделать это с помощью библиотеки boto3?

Ответ №1:

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

 s3 = boto3.client('s3', region_name='us-east-1')
paginator = s3.get_paginator('list_objects_v2')
pages = paginator.paginate(Bucket="dataset", Delimiter='/', Prefix='')
for page in pages:
    for obj in page['CommonPrefixes']:
        print(obj['Prefix'])