#python-3.x #amazon-web-services #amazon-s3 #boto3
#python-3.x #amazon-веб-сервисы #amazon-s3 #boto3
Вопрос:
Я пытаюсь подключиться к определенной папке в s3, используя образец python: s3://main_folder/sub_folder1/sub_folder2/
# want to enter sub_folder2 - s3://main_folder/sub_folder1/sub_folder2/
import boto3
def connect_to_s3():
s3_cli = boto3.resourse('s3')
bucket = s3_cli.Bucket('sub_folder2')
for b in bucket.objects.all():
print(b.key)
Я получаю эту ошибку:
вызвать класс ошибок (parsed_response, operation_name) botocore.errorfactory.NoSuchBucket: произошла ошибка (NoSuchBucket) при вызове операции ListObjects: указанный сегмент не существует
Ответ №1:
Ошибка гласит: The specified bucket does not exist
Это потому, что s3_cli.Bucket('sub_folder2')
требуется имя корзины, но вы указали имя папки и не сообщили ему название корзины.
Если вы хотите выполнять операции только над подмножеством корзины, вы можете использовать filter
с prefix
:
import boto3
def connect_to_s3():
s3_cli = boto3.resourse('s3')
bucket = s3_cli.Bucket('my-bucket')
for b in bucket.objects.filter(Prefix='sub_folder1/sub_folder2/').all():
print(b.key)
Комментарии:
1. Можете ли вы просто дать мне пример того, как я могу создать вложенную папку 3 в вложенной папке 2 или какой-либо файл в вложенной папке 2?
2. Папки не существуют в Amazon S3. Вместо этого
Key
объекта содержит полный путь, напримерfolder1/folder2/foo.txt
. Таким образом, вы можете создать объект в любой папке, даже если папка не существует! Например, в интерфейсе командной строки AWS (CLI) вы можете использоватьaws s3 cp foo.txt s3://my-bucket/folder1/folder2/foo.txt
, и он автоматически «создаст» папки. Но если этот объект затем удалить, папки исчезнут. Amazon S3 — это плоская система хранения, которая просто имитирует папки. На самом деле они не существуют. Это просто выглядит так, как они делают.