如何使用 Python 中的 Boto3 库通过 AWS 资源从 S3 删除对象?


在本文中,我们将了解如何使用 Python 的 Boto 3 库从 S3 删除对象。

示例 - 从 S3 的 Bucket_1/testfolder 中删除 test.zip

解决此问题的方法/算法

步骤 1 - 导入 boto3 和 botocore 异常以处理异常。

步骤 2 - s3_files_path 是函数中的参数。

步骤 3 - 验证 s3_files_path 是否以 AWS 格式(例如 s3://bucket_name/key)传递。

步骤 4 - 使用 boto3 库创建 AWS 会话。

步骤 5 - 为 S3 创建 AWS 资源。

步骤 6 - 拆分 S3 路径并执行操作以分离要删除的根存储桶名称和对象路径。

步骤 7 - 现在,使用函数 delete_object 并传递存储桶名称和键以进行删除。

步骤 8 - 对象也是一个字典,其中包含文件的所有详细信息。现在,获取每个文件的 LastModified 信息并将其与给定的日期时间戳进行比较。

步骤 9 - 如果在删除文件时出现任何错误,请处理通用异常。

示例

使用以下代码从 S3 删除对象 -

import boto3
from botocore.exceptions import ClientError

def delete_objects_from_s3(s3_files_path):
   if 's3://' not in s3_files_path:
      raise Exception('Given path is not a valid s3 path.')
   session = boto3.session.Session(profile_name='saml')
   s3_resource = session.resource('s3')
   s3_tokens = s3_files_path.split('/')
   bucket_name = s3_tokens[2]
   object_path = ""
   filename = s3_tokens[len(s3_tokens) - 1]
   print('bucket_name: ' + bucket_name)

   if len(s3_tokens) > 4:
      for tokn in range(3, len(s3_tokens) - 1):
         object_path += s3_tokens[tokn] + "/"
      object_path += filename
   else:
      object_path += filename
   print('object: ' + object_path)
   try:
      result = s3_resource.meta.client.delete_object(Bucket=bucket_name, Key=object_path)
   except ClientError as e:
      raise Exception( "boto3 client error in delete_objects_from_s3 function: " + e.__str__())
   except Exception as e:
      raise Exception( "Unexpected error in delete_objects_from_s3 function of s3 helper: " + e.__str__())

#delete test.zip
print(delete_objects_from_s3("s3://Bucket_1/testfolder/test.zip")

输出

bucket_name: Bucket_1
object: testfolder/test.zip

更新于: 2021年3月22日

1K+ 阅读量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告