2014-06-18 18 views

回答

4

在服務端沒有辦法做這種類型的過濾。 S3 API不支持它。您可以通過在對象名稱中使用prefixes來完成類似的操作。例如,如果使用模式這樣你命名你所有的物體:

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

您可以使用ListBucket請求prefix參數S3只返回了今天存儲的對象。在博託,這看起來像:

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他們在本地排序,但是這將是比列出的所有對象的要容易得多斗然後排序。

另一種選擇是將元數據對象存儲在類似DynamoDB的數據庫中,然後查詢該數據庫以查找要從S3檢索的對象。

你可以找到更多關於分級目錄中的S3 here

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的初學者,所以代碼可能沒有優化。隨時編輯答案以提供最佳代碼。

+1

謝謝你的回答,但我認爲,如果有兩個多桶鍵,它會花時間過長。對不起,我的問題不清楚。現在,我想,我想知道AWS是否存儲按創建時間排序的數據,並且用戶只能請求最新的100個文檔。 –

相關問題