簡體   English   中英

如何通過python只獲取在S3位置創建/修改的最新文件/文件

[英]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' ) 

限制場景條目數的三個有用參數是MarkerMaxKeysPrefix

標記字符串 ) - 指定在存儲桶中列出對象時要開始的鍵。
MaxKeys整數 ) - 設置響應中返回的最大鍵數。 響應可能包含較少的鍵,但永遠不會包含更多鍵。
Prefixstring ) - 限制對以指定前綴開頭的鍵的響應。

兩個筆記:

  • 您指定標記的密鑰將被包括在結果,即從上市下列指定為標記的一個關鍵開始。

  • boto3庫正在對結果執行自動分頁 每個頁面的大小由過濾器函數的MaxKeys參數確定(默認為1000)。

    如果迭代s3.Bucket.objectsCollection對象超過它,它將自動下載下一頁。 雖然這通常很有用,但是當你指定例如MaxKeys=10並且只想迭代10個鍵時,它可能會令人驚訝,但是迭代器將遍歷所有匹配的鍵,只需要為每個10個鍵提供服務器的新請求。
    所以, 如果你只想要例如前三個結果,手動中斷循環,不要依賴迭代器

    (不幸的是,這在文檔中並不清楚(實際上是非常錯誤的),因為庫參數描述是從API參數描述復制的,實際上它有意義:“ 響應可能包含更少的鍵,但永遠不會包含更多。 ”)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM