«Пути» (каталоги, папки) фактически не существуют в Amazon S3. Он использует плоскую (неиерархическую) модель хранения, в которой имя файла (Key
) каждого объекта содержит полный путь к объекту .
Однако большая часть функциональных возможностей путей по-прежнему предоставляется путем ссылки на Prefix
, который относится к первой части ключа.
Например, предположим, что существует объект с ключом: invoices/january/invoice.txt
Это имеет префикс invoices/
, а также префикс invoices/january/
. Префикс просто проверяет «Начинается ли ключ с этой строки?»
Следовательно, вы можете получить список файлов, используя путь s3 с:
import boto3
s3_resource = boto3.resource('s3')
for object in s3_resource.Bucket('my-bucket').objects.filter(Prefix='invoices/'):
print(object.key)
Или , используя метод client
:
import boto3
s3_client = boto3.client('s3')
response = s3_client.list_objects_v2(Bucket='my-bucket', Prefix='invoices/')
for object in response['Contents']:
print(object['Key'])
To удалить все файлы по пути s3 , вам нужно будет использовать приведенный выше код для итерации по каждому объекту, а затем позвоните по номеру delete_object()
. В качестве альтернативы вы можете создать список ключей для удаления, а затем вызвать delete_objects()
.
To проверить, является ли данный путь s3 выходом или нет вы можете позвонить head_object()
. Обратите внимание, что это будет работать с объектом , , но не будет работать с «путем», потому что каталоги на самом деле не существуют.
Однако, если вы создаете папку в управлении Amazon S3 console, создается объект нулевой длины с именем каталога. Это заставит "казаться", что каталог существует, но это не обязательно. Вы можете создать объект по любому пути, фактически не создавая каталоги. Они просто «появятся». Затем, когда все объекты в этом каталоге будут удалены, каталог больше не будет отображаться. Это magi c!
См. Также: Примеры Amazon S3 - документация Boto3