答案 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的初学者,因此可能无法优化代码。免费编辑答案以提供最佳代码。