Как проверить, пуста ли папка в корзине Amazon S3? - бото3 питон

avatar
Ricardo Francois
8 августа 2021 в 22:30
1848
1
0

У меня есть корзина Amazon S3 my-bucket и папка my-folder.

Я хочу, чтобы мой сценарий выполнял разные результаты в зависимости от наличия (или отсутствия) файлов с my-folder. Таким образом, я хочу проверить условие, является ли my-folder пустым и не содержит ли файлов.

Как мне это сделать?

К сожалению, я попытался найти документацию и другие сообщения о переполнении стека, но ничего похожего не нашел.

Источник
Anon Coward
8 августа 2021 в 22:40
1

Вы можете перечислить, используя list_objects_v2 для заданного префикса, и посмотреть, сколько объектов начинается с этого префикса.

Yaroslav Kornachevskyi
8 августа 2021 в 22:49
0

Подсчет объектов: all_objects = s3.meta.client.list_objects(Bucket="MyBucket", Prefix="myfolder/test/")

Ответы (1)

avatar
John Rotenstein
8 августа 2021 в 23:24
5

Вы можете подсчитать количество объектов в префиксе:

import boto3

BUCKET_NAME = 'bucket'
FOLDER_NAME = 'my-folder/'

s3_resource = boto3.resource('s3')

bucket = s3_resource.Bucket(BUCKET_NAME)

count = bucket.objects.filter(Prefix=FOLDER_NAME)

print(len(list(count)))
Sid
8 марта 2022 в 10:33
0

Если префикс содержит один объект, описанный выше метод в некоторых учетных записях возвращает один элемент, а в других учетных записях два элемента. случай 1: [s3.ObjectSummary(bucket_name='mybucket', key='logs/2021/04/03/123.gz')] случай 2: [s3.ObjectSummary(bucket_name='mybucket', key='logs/2021/04/03/123.gz'), s3.ObjectSummary(bucket_name='mybucket', key='logs/2021/04/03/')] Есть идеи по поводу этого несоответствия?

John Rotenstein
8 марта 2022 в 11:46
1

@Sid При использовании кнопки Создать папку в консоли управления S3 создается объект нулевой длины с именем каталога. Это заставляет каталог «появляться» в списках (даже если каталоги на самом деле не существуют в Amazon S3). Объект с key='logs/2021/04/03/' является одним из этих объектов нулевой длины. Если вы хотите игнорировать их, просто игнорируйте любой объект, ключ которого заканчивается косой чертой.

Sid
10 марта 2022 в 13:12
0

Спасибо за объяснение. Моя реальная проблема заключается в том, что в некоторых учетных записях AWS я получаю эти «объекты нулевой длины», в то время как в других они не возвращаются при использовании objects.filter().

Sid
10 марта 2022 в 13:28
0

понятно. Вы имеете в виду, что при нажатии кнопки Create folder создаются только «объекты нулевой длины», но если папка создается через API, они не создаются. Спасибо.