[英]How to get last modified date of latest file from S3 with Boto Python?
[英]How can I get only the latest file/files created/modified on S3 location through python
使用boto我嘗試了以下代碼:
from boto.s3.connection import S3Connection
conn = S3Connection('XXX', 'YYYY')
bucket = conn.get_bucket('myBucket')
file_list = bucket.list('just/a/prefix/')
但我無法獲取列表的長度或file_list的最后一個元素,因為它是BucketListResultSet類型,請為此方案建議一個解決方案
您正在嘗試使用boto
庫,該庫已過時且未得到維護。 該庫的問題數量正在增加。
更好地使用目前開發的boto3
。
首先,讓我們定義搜索參數:
>>> bucket_name = "bucket_of_m"
>>> prefix = "region/cz/"
導入boto3
並創建代表S3資源的s3:
>>> import boto3
>>> s3 = boto3.resource("s3")
獲取桶:
>>> bucket = s3.Bucket(name=bucket_name)
>>> bucket
s3.Bucket(name='bucket_of_m')
為具有給定前綴的對象定義過濾器:
>>> res = bucket.objects.filter(Prefix=prefix)
>>> res
s3.Bucket.objectsCollection(s3.Bucket(name='bucket_of_m'), s3.ObjectSummary)
並迭代它:
>>> for obj in res:
... print obj.key
... print obj.size
... print obj.last_modified
...
每個obj
都是ObjectSummary(而不是Object本身),但它仍然需要了解它
>>> obj
s3.ObjectSummary(bucket_name='bucket_of_m', key=u'region/cz/Ostrava/Nadrazni.txt')
>>> type(obj)
boto3.resources.factory.s3.ObjectSummary
您可以從中獲取Object並根據需要使用它:
>>> o = obj.Object()
>>> o
s3.Object(bucket_name='bucket_of_m', key=u'region/cz/rodos/fusion/AdvancedDataFusion.xml')
過濾的選項並不多,但前綴可用。
作為Jan答案的附錄:
似乎boto3庫在此期間發生了變化,目前(編寫本文時為1.6.19版) 為filter
方法提供了更多參數 :
object_summary_iterator = bucket.objects.filter( Delimiter='string', EncodingType='url', Marker='string', MaxKeys=123, Prefix='string', RequestPayer='requester' )
限制場景條目數的三個有用參數是Marker
, MaxKeys
和Prefix
:
標記 ( 字符串 ) - 指定在存儲桶中列出對象時要開始的鍵。
MaxKeys ( 整數 ) - 設置響應中返回的最大鍵數。 響應可能包含較少的鍵,但永遠不會包含更多鍵。
Prefix ( string ) - 限制對以指定前綴開頭的鍵的響應。
兩個筆記:
您指定標記的密鑰將不被包括在結果,即從上市下列指定為標記的一個關鍵開始。
boto3庫正在對結果執行自動分頁 。 每個頁面的大小由過濾器函數的MaxKeys參數確定(默認為1000)。
如果迭代s3.Bucket.objectsCollection
對象超過它,它將自動下載下一頁。 雖然這通常很有用,但是當你指定例如MaxKeys=10
並且只想迭代10個鍵時,它可能會令人驚訝,但是迭代器將遍歷所有匹配的鍵,只需要為每個10個鍵提供服務器的新請求。
所以, 如果你只想要例如前三個結果,手動中斷循環,不要依賴迭代器 。
(不幸的是,這在文檔中並不清楚(實際上是非常錯誤的),因為庫參數描述是從API參數描述復制的,實際上它有意義:“ 響應可能包含更少的鍵,但永遠不會包含更多。 ”)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.