boto3在python中使用是获取s3存储桶中具有匹配前缀的最后一个键(按词法排序)的更好方法目前正在做以下工作:bucket = 'hello'prefix = 'is/it/me/your/looking/for'paginator = s3.get_paginator('list_objects_v2')last_key = Nonefor page in paginator.paginate(Bucket=bucket, Prefix=prefix): for obj in page['Contents']: last_key = obj['Key']显然,随着与前缀匹配的对象数的增加,这会受到影响。
2 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
不。
磁盘上的数据结构可以很容易地支持这一点,但亚马逊没有公开这样的功能。
我有一个“查找最近存储的时间戳”用例,即 compute max(stamp)
。
这是使它工作的倒计时kludge:
任意定义 END_OF_TIME,可能是 2060-01-01。
然后remaining
秒就是减去当前时间。用前导零格式化它,以便有固定数量的列。写入记录时将其用作 S3 对象名称前缀。
使用这种方案很难计算最小值(stamp),但找到最大值很简单。这是返回的第一个结果list_objects_v2
。
繁星coding
TA贡献1797条经验 获得超4个赞
您清楚地提到您需要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):
添加回答
举报
0/150
提交
取消