如何使用 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