python - 我无法使用一种方法删除 s3 对象,但我可以使用另一种方法删除。(obj.delete 与 delete_object)
问题描述
使用客户端会话 delete_object 方法和 obj.delete 方法删除 s3 对象有什么区别?
打电话时
import boto3
session = boto3.Session(aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key_emr,
region_name=region_name)
s3_client = session.client('s3')
s3_client.delete_object(Bucket=bucket_name, Key='input/df.parquet')
代码运行没有任何错误。
但是下面的代码
s3 = boto3.resource('s3')
obj = s3.Object(bucket_name, "input/df.parquet")
obj.delete()
导致ClientError;调用 DeleteObject 操作时发生错误 (AccessDenied):访问被拒绝
使用 aws data wrangler 库时也会发生类似的事情。以下代码的运行
import awswrangler as wr
wr.s3.delete_objects(f"s3://{bucket_name}/input/df.parquet")
不会删除任何内容,也不会显示任何错误。
解决方案
好的,解决了,我已将 s3 定义为 aboto3.resource('s3')
而不是session.resource('s3')
推荐阅读
- python - matplotlib 绘图在谷歌 colab 中不起作用
- ios - ITMS-90626:无效的 Siri 支持 - 自定义意图的本地化标题:找不到区域设置的“配置”:de_DE
- ios - iOS Calendar.ordinality(of:in:for:) 时代月份的错误结果
- kubernetes - 如何访问 3rd-party 自定义资源定义?
- python - Python OpenCV 抛出 cv::OutOfMemoryError
- flutter - 在底部导航栏中更改页面时强制 Flutter 不丢失数据
- spring - 在运行时 Spring Boot 上更改对静态 Web 资源的访问
- python - 无法使用 css 选择器在 python 中获取数据
- python - Python curse 显示时钟示例刷新数据
- r - 根据相对于治疗日期的日期查找事件