Один из способов отфильтровать папки - проверить конечный символ объекта, если вы уверены, что ни один файл не заканчивается косой чертой:
ьзуя boto3, как я могу получить все файлы в моем S3-контейнере, не извлекая папки?
Рассмотрим следующую структуру файлов:
file_1.txt
folder_1/
file_2.txt
file_3.txt
folder_2/
folder_3/
file_4.txt
В этом примере меня интересуют только 4 файла.
РЕДАКТИРОВАТЬ:
Ручное решение:
def count_files_in_folder(prefix):
total = 0
keys = s3_client.list_objects(Bucket=bucket_name, Prefix=prefix)
for key in keys['Contents']:
if key['Key'][-1:] != '/':
total += 1
return total
В этом случае всего будет 4.
Если бы я только сделал
count = len(s3_client.list_objects(Bucket=bucket_name, Prefix=prefix))
результат будет 7 объектов (4 файла и 3 папки):
file.txt
folder_1/
folder_1/file_2.txt
folder_1/file_3.txt
folder_1/folder_2/
folder_1/folder_2/folder_3/
folder_1/folder_2/folder_3/file_4.txt
Я просто хочу:
file.txt
folder_1/file_2.txt
folder_1/file_3.txt
folder_1/folder_2/folder_3/file_4.txt