3

我想使用Client Library for Python獲取Google雲存儲存儲桶中所有blob的列表。Google雲端存儲Python客戶端庫中的list_blobs函數如何工作

根據documentation我應該使用list_blobs()函數。該函數似乎使用兩個參數max_resultspage_token來實現分頁。我不確定如何使用它們。

特別是,從哪裏得到page_token

我本來料想list_blobs()會提供一個page_token用於後續調用,但我找不到任何文檔。

另外,max_results是可選的。如果我不提供它會怎麼樣?是否有默認限制?如果是這樣,那是什麼?

+0

我覺得這太混亂,在尋找如何獲得目錄中的所有斑點,無分頁? – bw4sz

回答

2

list_blobs()不會使用分頁,但你不要使用page_token來實現它。

如何使用:

方式list_blobs()工作是,它返回一個迭代器,通過所有的結果迭代做幕後背後分頁。所以,簡單地做,這將讓你通過所有的結果,根據需要獲取網頁:

for blob in bucket.list_blobs() 
    print blob.name 

的文件是錯誤/誤導:

截至2017年4月26日,這是文檔所說的話:

page_token(str) - (可選)用於 斑點的下一個「頁面」的不透明標記。如果不通過,將返回blob的第一頁。

這意味着結果將是單頁結果,其中page_token決定哪個頁面。這是不正確的。結果迭代器遍歷多個頁面。 page_token究竟代表的是迭代器應該在哪個頁面START at。它沒有提供page_token它將在第一頁開始。

有助於瞭解:

max_results限制迭代器返回結果的總數。

該迭代器,如果你需要將其置於網頁:

for page in bucket.list_blobs().pages: 
    for blob in page: 
     print blob.name 
0

這是一個有點混亂,但我找到了答案在這裏

https://googlecloudplatform.github.io/google-cloud-python/latest/iterators.html

您可以通過網頁進行迭代,並調用需要的物品

iterator=self.bucket.list_blobs()   

self.get_files=[]   
for page in iterator.pages: 
    print(' Page number: %d' % (iterator.page_number,)) 
    print(' Items in page: %d' % (page.num_items,)) 
    print('  First item: %r' % (next(page),)) 
    print('Items remaining: %d' % (page.remaining,)) 
    print('Next page token: %s' % (iterator.next_page_token,))   
    for f in page: 
     self.get_files.append("gs://" + f.bucket.name + "/" + f.name) 

print("Found %d results" % (len(self.get_files))) 
+0

比這更簡單。你不需要做iterator.pages,除非你願意看到這些頁面。只需在bucket.list_blobs()中爲blob執行遍歷所有結果。分頁將在幕後進行。我剛剛發佈了我的答案。我沒有理解它... – user2771609

相關問題