![](/img/trans.png)
[英]How can I get the list of only folders in amazon S3 using python boto?
[英]How can I get a list of all file names having same prefix on Amazon S3?
我正在使用boto
和Python
在Amazon S3
存儲文件和從中檢索文件。 我需要存在於文件列表directory
。 我知道S3中沒有目錄的概念,所以我在表述我的問題,例如how can I get a list of all file names having same prefix?
例如-假設我有以下文件-
Brad/files/pdf/abc.pdf
Brad/files/pdf/abc2.pdf
Brad/files/pdf/abc3.pdf
Brad/files/pdf/abc4.pdf
mybucket/files/pdf/new/
mybucket/files/pdf/new/abc.pdf
mybucket/files/pdf/2011/
當我調用foo("Brad")
,它應該返回如下列表:
files/pdf/abc.pdf
files/pdf/abc2.pdf
files/pdf/abc3.pdf
files/pdf/abc4.pdf
最好的方法是什么?
user3的方法是純客戶端解決方案。 我認為它在小規模上效果很好。 如果一個存儲桶中有數百萬個對象,則可能需要支付許多請求和帶寬費用。
另外,您可以使用GET BUCKET API提供的定界符和前綴參數來歸檔您的需求。 該文檔中有很多示例,請參閱http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html
不用說,您可以使用boto實現此目的。
為此,您可以使用startswith並列出理解功能:
paths=['Brad/files/pdf/abc.pdf','Brad/files/pdf/abc2.pdf','Brad/files/pdf/abc3.pdf','Brad/files/pdf/abc4.pdf','mybucket/files/pdf/new/','mybucket/files/pdf/new/abc.pdf','mybucket/files/pdf/2011/']
def foo(m):
return [p for p in paths if p.startswith(m+'/')]
print foo('Brad')
輸出:
['Brad/files/pdf/abc.pdf', 'Brad/files/pdf/abc2.pdf', 'Brad/files/pdf/abc3.pdf', 'Brad/files/pdf/abc4.pdf']
使用split和filter :
def foo(m):
return filter(lambda x: x.split('/')[0]== m, paths)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.