有没有一种快速的方法来获取具有匹配前缀的 aws 存储桶中的词法最大键

boto3在python中使用是获取s3存储桶中具有匹配前缀的最后一个键(按词法排序)的更好方法


目前正在做以下工作:


bucket = 'hello'

prefix = 'is/it/me/your/looking/for'

paginator = s3.get_paginator('list_objects_v2')

last_key = None

for page in paginator.paginate(Bucket=bucket, Prefix=prefix):

    for obj in page['Contents']:

        last_key = obj['Key']

显然,随着与前缀匹配的对象数的增加,这会受到影响。


撒科打诨
浏览 63回答 2
2回答

牧羊人nacy

不。磁盘上的数据结构可以很容易地支持这一点,但亚马逊没有公开这样的功能。我有一个“查找最近存储的时间戳”用例,即 compute max(stamp)。这是使它工作的倒计时kludge:任意定义 END_OF_TIME,可能是 2060-01-01。然后remaining秒就是减去当前时间。用前导零格式化它,以便有固定数量的列。写入记录时将其用作 S3 对象名称前缀。使用这种方案很难计算最小值(stamp),但找到最大值很简单。这是返回的第一个结果list_objects_v2。

繁星coding

您清楚地提到您需要boto3版本,但这里是工作 cli 版本。它可能会给你一些线索。aws s3api list-objects --bucket hello --prefix "is/it/me/your/looking/for" --query "reverse(sort_by(Contents,&Key))"在您的代码中可能是这样的(抱歉不熟悉python)query = 'reverse(sort_by(Contents,&Key))'for page in paginator.paginate(Bucket=bucket, Prefix=prefix, Query=query):
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python