2016-03-31 46 views
4

使用博託我嘗試下面的代碼修改的S3位置:我怎麼能得到的只有最新的文件/文件創建/通過蟒蛇

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類型,請爲此場景建議一個解決方案

+0

您是否只想列出給定存儲桶中具有指定前綴的所有文件?或者有更多的期望(比如只獲取最新的文件等)。 –

回答

4

您正在嘗試使用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(不是對象本身),但它擁有足夠多學習一些有關它

>>> obj 
s3.ObjectSummary(bucket_name='bucket_of_m', key=u'region/cz/Ostrava/Nadrazni.txt') 
>>> type(obj) 
boto3.resources.factory.s3.ObjectSummary 

你可以從它那裏得到對象並根據需要使用它:

>>> o = obj.Object() 
>>> o 
s3.Object(bucket_name='bucket_of_m', key=u'region/cz/rodos/fusion/AdvancedDataFusion.xml') 

過濾的選項不多,但前綴可用。

+0

Jan感謝您指點正確的方向.....第一次使用boto3完全是令人困惑的,但是在設置好aws後配置它變得很容易和寒冷..:> – meenakshi

+0

@meenakshi我知道,你在說什麼,使用舊的'boto' - 至少對於S3來說,以前更簡單了。你可能會在這個主題上看到相關的問題:['boto3'不是'boto'(還?)]的替代品(https://github.com/boto/boto/issues/3306)。如果你按照討論,原創博托米奇加爾納特的作者明確指出,**你必須切換到'boto3',「你不能再回家」** –