Список AWS папок S3 с помощью boto3 - PullRequest
0 голосов
/ 19 июня 2020

У меня есть код Boto, который собирает подпапки S3 в папке levelOne:

import boto

s3 = boto.connect_s3()
bucket = s3.get_bucket("MyBucket")

for level2 in bucket.list(prefix="levelOne/", delimiter="/"):
    print(level2.name)

Пожалуйста, помогите обнаружить аналогичные функции в boto3. Код не должен перебирать все объекты S3, потому что в корзине очень большое количество объектов.

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Если вы просто ищете список папок, используйте CommonPrefixes, возвращаемое при перечислении объектов. Обратите внимание, что для получения CommonPrefixes:

import boto3

s3_client = boto3.client('s3')

response = s3_client.list_objects_v2(Bucket='BUCKET-NAME', Delimiter = '/')

for prefix in response['CommonPrefixes']:
    print(prefix['Prefix'][:-1])

необходимо указать Delimiter. Если в вашей корзине ОГРОМНОЕ количество папок и объектов, вы можете рассмотреть возможность использования Amazon S3 Inventory , который может предоставлять ежедневный или еженедельный CSV-файл со списком всех объектов.

0 голосов
/ 19 июня 2020

Я думаю, что следующее должно быть эквивалентно:

import boto3

s3 = boto3.resource('s3') 

bucket = s3.Bucket('MyBucket')

for object in bucket.objects.filter(Prefix="levelOne/", Delimiter="/"):
    print(object.key)
...