如何在Python中使用Boto3库使用AWS Resource从S3中删除对象?

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

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

解决这个问题的方法/算法

步骤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
frombotocore.exceptionsimport 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__())

#删除test.zip
print(delete_objects_from_s3("s3://Bucket_1/testfolder/test.zip")
输出结果
bucket_name: Bucket_1
object: testfolder/test.zip