我在S3中有这个路径:object1/object2/object3/object4/
在Object4/
中,我有一个对象列表,例如:
directory1/directory2/directory3/directory4/2022-30-09-15h21/
directory1/directory2/directory3/directory4/2023-20-12-12h30/
directory1/directory2/directory3/directory4/2022-31-12-09h34/
directory1/directory2/directory3/directory4/2023-12-08-14h56/
字符串
我想选择在directory4/
中最后创建的目录,然后我应该下载它里面的所有文件。
我写了这个脚本来实现它:
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
型
我的脚本选择directory4/
中最后创建的目录并下载最后创建的文件,我的脚本的结果是:directory1/directory2/directory3/directory4/2023-20-12-12h30/my_file.csv
但我想下载里面的所有文件。
你有一个想法,请我如何修改我的脚本,以选择最后创建的目录在directory4/
和我下载里面的所有文件?
谢谢
2条答案
按热度按时间yiytaume1#
看来你的要求是:
directory1/directory2/directory3/directory4/
下的所有子目录)YYYY-DD-MM-HHhmm
时间戳的目录名查找表示最新日期的子目录下面是一个使用S3返回的
CommonPrefixes
列表的示例程序,该列表实际上是一个子目录列表。字符串
whlutmcx2#
将最后创建的对象选择到S3 Buckets中的一种方法是创建DynamoDB,并使用Lambda和S3 Object Lambda将目录保存到DynamoDB中,并将索引放在修改/更改时间上。
Ofc你可以使用其他数据库,然后DynamoDB,但DynamoDB是非常便宜的开始,后来你可以考虑什么使sens通过改变DB,DynamoDB只有成本当你使用它,如果你使用该选项。
它比你要求的要复杂一点,但是如果你在S3中有100.000.000个对象,你需要为每个列表扫描和对象查找付费,所以如果你犯了错误,它可能会非常昂贵,所以我建议你使用S3 Object Lambda(https://aws.amazon.com/s3/features/object-lambda/)。