用于aws s3的python boto,如何在存储桶中获取已排序和有限的文件列表?

时间:2014-06-18 09:42:05

标签: amazon-web-services amazon-s3 boto

如果存储桶上有太多文件,我想只获得100个最新文件, 我怎样才能得到这些清单?

s3.bucket.list似乎没有这个功能。有谁知道这个?

请告诉我。感谢。

2 个答案:

答案 0 :(得分:4)

在服务端无法进行此类过滤。 S3 API不支持它。您可以通过在对象名称中使用prefixes来完成类似的操作。例如,如果使用如下模式命名所有对象:

YYYYMMDD/<objectname>
20140618/foobar (as an example)

您可以使用S3中prefix请求的ListBucket参数来仅返回今天存储的对象。在boto中,这看起来像:

import boto
s3 = boto.connect_s3()
bucket = s3.get_bucket('mybucket')
for key in bucket.list(prefix='20140618'):
    # do something with the key object

您仍然需要检索具有该前缀的所有对象,然后根据其last_modified_date在本地对它们进行排序,但这比列出存储桶中的所有对象然后排序要容易得多。

另一种选择是将S3对象的元数据对象存储在DynamoDB等数据库中,然后查询该数据库以找到要从S3检索的对象。

您可以在S3 here

中找到有关分层列表的更多信息

答案 1 :(得分:1)

你能试试这段代码吗?这对我有用。

import boto,operator,time
con = boto.connect_s3()

key_repo = []

bucket = con.get_bucket('<your bucket name>')
bucket_keys = bucket.get_all_keys()

for object in bucket_keys:
    t = (object.key,time.strptime(object.last_modified[:19], "%Y-%m-%dT%H:%M:%S"))
    key_repo.append(t)

key_repo.sort(key=lambda item:item[1], reverse=1)

for key in key_repo[:10]:  #top 10 items in the list
    print key[0], '   ',key[1]

PS:我是Python的初学者,因此可能无法优化代码。免费编辑答案以提供最佳代码。