python - 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:
- Created a folder, under the bucket which I have access to, named 'test'
- executed above code with Prefix='/test/'
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:
'Deleted': [{'Key': '/test/table_name.dat'}, {'Key': '/test/table_name.txt'}]}]
I guess I don't understand the intended functionality of this code. I was expecting it to delete my empty 'test' folder which I created as a root folder inside my bucket. i.e. bucket/test/ but instead it appears to have searched my entire bucket for folders named "test" and deleted objects inside them??
解决方案
首先以下是一些提示: 永远不要在 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
推荐阅读
- amazon-web-services - CloudFront 签名 URL 中断客户端缓存
- c++ - 尝试编译时出现 C++ 致命错误:致命错误:字符串:没有这样的文件或目录
- sql - How to append multiple columns from two select sub queries together using the same primary key?
- javascript - 优化大型内容 HTML 的性能
- apache - apachectl 命令在 SSH 中不起作用
- php - 在 Woocommerce 中的 functions.php 文件中显示添加到购物车按钮的价格
- sql - 如何在另一个选择请求中从选择请求中添加多行
- excel - 将两个范围之间的每日销售数据相加
- javascript - 在 Javascript 中创建设置器
- c# - StackExchange.Redis 扫描 x 数量的键