如何使用 Python 中的 Boto3 库根据使用 AWS 资源的最后修改日期从 S3 获取文件列表?

问题陈述- 使用 Python 中的 boto3 库从 S3 获取文件列表,这些文件在给定的日期时间戳后被修改。

示例-test.zip如果在 2021-01-21 13:19:56.986445+00:00 之后修改,则从 S3 的 Bucket_1/testfolder 中列出。

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

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

步骤 2 - s3_path和last_modified_timestamp是函数list_all_objects_based_on_last_modified中的两个参数。“last_modified_timestamp”的格式应为“2021-01-22 13:19:56.986445+00:00”。默认情况下,无论地理位置如何,boto3 都能理解 UTC 时区。

步骤 3 - 验证 s3_path 以 AWS 格式作为 s3://bucket_name/key 传递。

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

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

第 6 步- 现在使用函数 list_objects 列出给定前缀的所有对象并处理异常(如果有)。

Step 7 - 上述函数的结果是一个字典,它包含名为“Contents”的键中的所有文件级信息。现在提取对象中的桶级详细信息。

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

Step 9 - 如果LastModified大于给定的时间戳,保存完整的文件名,否则忽略它。

步骤 10 - 返回在给定日期时间戳之后修改的文件列表。

示例

以下代码根据上次修改日期时间戳从 AWS S3 获取文件列表 -

import boto3

frombotocore.exceptionsimport ClientError

def list_all_objects_based_on_last_modified(s3_files_path,

last_modified_timestamp):

   if 's3://' not in s3_files_path:

      raise Exception('Given path is not a valid s3 path.')

   session = boto3.session.Session()

   s3_resource = session.resource('s3')

   bucket_token = s3_files_path.split('/')

   bucket = bucket_token[2]

   folder_path = bucket_token[3:]

   prefix = ""

   for path in folder_path:

      prefix = prefix + path + '/'

   try:

      result = s3_resource.meta.client.list_objects(Bucket=bucket, Prefix=prefix)

   except ClientError as e:

      raise Exception( "boto3 client error in list_all_objects_based_on_last_modified function: " + e.__str__())

   except Exception as e:

      raise Exception( "Unexpected error in list_all_objects_based_on_last_modified

function of s3 helper: " + e.__str__())

   filtered_file_names = []

   for obj in result['Contents']:

      if str(obj["LastModified"]) >= str(last_modified_timestamp):

         full_s3_file = "s3://" + bucket + "/" + obj["Key"]

         filtered_file_names.append(full_s3_file)

      return filtered_file_names

#给一个时间戳来获取 test.zip

print(list_all_objects_based_on_last_modified("s3://Bucket_1/testfolder" , "2021-01-21 13:19:56.986445+00:00"))

#给一个时间戳,之后没有文件被修改

print(list_all_objects_based_on_last_modified("s3://Bucket_1/testfolder" , "2021-01-21 13:19:56.986445+00:00"))

输出结果
#给一个时间戳来获取 test.zip

[s3://Bucket_1/testfolder/test.zip]

#给一个时间戳,之后没有文件被修改

[]

以上是 如何使用 Python 中的 Boto3 库根据使用 AWS 资源的最后修改日期从 S3 获取文件列表? 的全部内容, 来源链接: utcz.com/z/311400.html

回到顶部