2015-01-04 115 views
0

我正在與Python Boto合作使用S3。比方說,桶的名稱是......桶。S3 - 獲取目錄密鑰

在桶中,我有一個目錄a。在一個,我有很多其他目錄一,二,三...在每個目錄一,二,三等,我有很多文件。

我試圖檢查一個目錄如/ x存在。我試過這樣的事情:

key = bucket.get_key('/a/one/') 

但沒有運氣。我的解決方法是返回

list(bucket.list("a/", "/")) 

並查看x是否存在於列表中,但似乎很混亂。另外,在返回的列表中,我有'a /'作爲關鍵字。如果'a /',一個目錄,是一個關鍵,那麼'a/one /'也不應該是一個?

這樣做的最好方法是什麼?感謝任何幫助。

回答

1

S3沒有目錄的概念。目錄通常被認爲是「現有的」如果有一樣的目錄路徑的關鍵,但在一個桶一個關鍵的這個例子是完全有效:

'/path/to/file/with/no/dir/file.txt' 

通知有因爲沒有按鍵輸入:

'/path/' 
'/path/to/' 

雖然可能有,但必須加以管理。

你可以做的是看看是否有任何鍵駐留在您檢查的目錄,是這樣的:

dir_exists = any([k.startswith(path) for k in s3_file_names]), 

否則,你必須保持在桶目錄中的文件。

+0

那麼,我現在正在檢查列表中是否存在x,是不是像最初想象的那樣混亂? – intl 2015-01-04 12:07:58

+0

它可能會返回一個「False Negative」,因爲可以有一個'/ a/b/c'文件,但目錄'/ a/b /'沒有條目。你究竟想要做什麼?也許有更好的答案。 – 2015-01-04 12:09:24

+0

簡單地說,我想檢查一個目錄是否存在。在這種情況下,我想檢查/ x,其中x是我正在檢查的,存在。 – intl 2015-01-04 12:12:21