首页 > 解决方案 > How to delete a folder and its contents on Amazon S3 using Python

问题描述

For some reason my response only gives me empty square brackets, i.e [ ] and nothing happens.

Here's my code:

session = boto3.Session(aws_access_key_id=awsaccesskey,aws_secret_access_key=awssecretkey,region_name='eu-west-1')
s3 = session.resource('s3')
b = s3.Bucket(s3bucket)
r = b.objects.filter(Prefix=s3path).delete()
return(r)

Update: Per John's recommendation I tried to create a test bucket but unfortunately I received a permissions denied error. So instead I did the following:

This time I did receive a ResponseMetadata object instead of empty brackets. However I'm still puzzled. My HTTPStatusCode is 200. But when it tells me what it deleted it says this:

标签: pythonamazon-s3boto3

解决方案


首先以下是一些提示: 永远不要在 boto3 客户端对象中硬编码访问凭证。

S3 中没有文件夹。相反,这些键形成了一个平面命名空间。但是,名称中带有斜杠的键会在某些程序中特别显示,包括 AWS 控制台(例如,请参阅 Amazon S3 boto - 如何创建文件夹?)。

您可以(并且必须)按前缀列出文件并删除,而不是删除“目录”。在本质上:

对于 bucket.list(prefix='your/directory/') 中的键:key.delete()

您可以参考此链接,此处捆绑了一个示例: https ://docs.aws.amazon.com/code-samples/latest/catalog/python-s3-delete_object.py.html

import logging
import boto3
from botocore.exceptions import ClientError

def delete_object(bucket_name, object_name):
"""Delete an object from an S3 bucket

:param bucket_name: string
:param object_name: string
:return: True if the referenced object was deleted, otherwise False
"""

# Delete the object
s3 = boto3.client('s3')
try:
    s3.delete_object(Bucket=bucket_name, Key=object_name)
except ClientError as e:
    logging.error(e)
    return False
return True

推荐阅读