如果存儲桶上的文件太多,我只想獲得100個最新文件, 如何才能獲取這些列表?python boto for aws s3,如何獲得排序和有限的文件列表中桶?
s3.bucket.list似乎不具備該功能。有沒有人知道這一點?
請讓我知道。謝謝。
如果存儲桶上的文件太多,我只想獲得100個最新文件, 如何才能獲取這些列表?python boto for aws s3,如何獲得排序和有限的文件列表中桶?
s3.bucket.list似乎不具備該功能。有沒有人知道這一點?
請讓我知道。謝謝。
在服務端沒有辦法做這種類型的過濾。 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
你可以試試這段代碼。這對我有效。
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的初學者,所以代碼可能沒有優化。隨時編輯答案以提供最佳代碼。
謝謝你的回答,但我認爲,如果有兩個多桶鍵,它會花時間過長。對不起,我的問題不清楚。現在,我想,我想知道AWS是否存儲按創建時間排序的數據,並且用戶只能請求最新的100個文檔。 –