我在S3中有这条路径:
object1/object2/object3/object4/
在
Object4/
我有一个对象列表,例如:
object1/object2/object3/object4/2022-30-09-15h21/
object1/object2/object3/object4/2023-20-12-12h30/
object1/object2/object3/object4/2022-31-12-09h34/
object1/object2/object3/object4/2023-12-08-14h56/
我想选择并返回
object4/
中最后创建的对象。
我写了这个脚本来做到这一点:
import boto3
from datetime import datetime
session_root = boto3.Session(region_name='eu-west-3', profile_name='my_profile')
s3_client = session_root.client('s3')
bucket_name = 'my_bucket'
prefix = 'object1/object2/object3/object4/'
# List objects in the bucket
response = s3_client.list_objects_v2(Bucket=bucket_name, Prefix=prefix)
# Extract the object names and convert them to datetime objects
objects_with_dates = [(obj['Key'], datetime.strptime(obj['LastModified'].strftime('%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S')) for obj in response.get('Contents', [])]
# Find the latest created object
latest_object = max(objects_with_dates, key=lambda x: x[1])
print("Last created S3 object:", latest_object[0]) # the returned value is: object1/object2/object3/object4/2023-20-12-12h30/my_file.csv
我的脚本选择
object4/
中最后创建的对象并下载里面的文件,我的脚本的结果是:object1/object2/object3/object4/2023-20-12-12h30/my_file.csv
但我只想选择并返回
object4/
中最后创建的对象,例如:
object1/object2/object3/object4/2023-20-12-12h30/
您知道如何修改我的脚本以仅选择并返回最后创建的对象而不返回其中的文件吗?
谢谢
将最后创建的对象选择到 S3 存储桶中的一种方法是创建 DynamoDB 并使用带有 S3 对象 Lambda 的 Lambda 将目录保存到 DynamoDB 中并将索引放在修改/更改时间上。
Ofc,您可以使用 DynamoDB 以外的其他数据库,但 DynamoDB 的启动成本非常便宜,稍后您可以考虑更改数据库有何意义,DynamoDB 仅在您使用该选项时才产生成本。
这比您要求的要复杂一点,但是如果您的 S3 中有 100.000.000 个对象,您将需要为每次列表扫描和对象查找付费,因此如果您犯错误,可能会非常昂贵,所以我会推荐您使用 S3 对象 Lambda ( https://aws.amazon.com/s3/features/object-lambda/ )