簡體   English   中英

如何獲得Amazon S3上具有相同前綴的所有文件名的列表?

[英]How can I get a list of all file names having same prefix on Amazon S3?

我正在使用botoPythonAmazon 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.

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