gpt4 book ai didi

amazon-web-services - 使用 boto3 从 Amazon S3 存储桶前缀中获取 n 个最后修改的对象

转载 作者:行者123 更新时间:2023-12-05 04:48:25 25 4
gpt4 key购买 nike

我需要从 S3 前缀中获取按上次修改时间戳排序的对象键列表。由于存在很多对象,而且我知道我对最近修改过的特定数量的对象感兴趣,在 boto3 中执行此操作的方法是什么?

像我目前所做的那样在客户端对所有对象进行排序需要很长时间:

def get_last_modified(obj):
return int(obj.last_modified.strftime("%s"))

def process(prefix):
input_bucket = boto3.resource("s3").Bucket("my-test-bucket")
objects = list(input_bucket.objects.filter(Prefix=prefix))
sorted_objects = sorted(objects, key=get_last_modified, reverse=True)

最佳答案

我一直在寻找 boto3 中的过滤选项但是它似乎不是开箱即用的。所有解决方案都建议提取所有文件,然后处理结果。以下内容以您的文件的命名约定为条件,但它可以解决问题。

这是对我有用的东西,它似乎也可能与这里相关:你提到你对最近修改的文件感兴趣,并且你在文件名的前缀中有那个时间戳

在我的例子中,文件名为 FOLDER/PREFIX_<TIMESTAMP>.json ,其中 TIMESTAMP 是文件生成的时间。您可以使用 list_objects_v2StartAfter按文件名升序过滤。

所以我的桶看起来是这样的:

FOLDER/PREFIX_1662634638.json.zip
FOLDER/PREFIX_1662634774.json.zip
FOLDER/PREFIX_1662634882.json.zip

在我的例子中,我基本上可以从最后 X 秒获取文件,然后在需要时过滤客户端。

要获取过去一小时的所有文件,请执行以下操作(上面给出的文件结构示例):

import boto3
import datetime

s3 = boto3.client('s3',
aws_access_key_id = ACCESS_KEY,
aws_secret_access_key = SECRET_KEY)

last_hour = datetime.datetime.now() - datetime.timedelta(seconds=60*60)
last_hour_ts = int(last_hour.timestamp())

s3.list_objects_v2(
Bucket = 'MY_BUCKET',
Prefix = 'FOLDER/PREFIX',
StartAfter = f'FOLDER/PREFIX_{last_hour_ts}')

希望对您有所帮助!

关于amazon-web-services - 使用 boto3 从 Amazon S3 存储桶前缀中获取 n 个最后修改的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68116173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com