使用 Python 列出 Blob 容器
當您從程式碼列出 Azure 儲存體中的容器時,可以指定數個選項來管理從 Azure 儲存體傳回結果的方式。 本文說明如何使用適用於 Python 的 Azure 儲存體用戶端程式庫列出容器。
若要了解如何使用非同步 API 列出 Blob 容器,請參閱以非同步方式列出容器。
必要條件
- 本文假設您已有專案設定為使用適用於 Python 的 Azure Blob 儲存體用戶端程式庫。 若要了解如何設定您的專案,包括安裝套件、新增
import
陳述式,以及建立授權的用戶端物件,請參閱開始使用 Azure Blob 儲存體和 Python。 - 授權機制必須具有列出 Blob 容器的權限。 若要深入了解,請參閱下列 REST API 作業的授權指引:
關於容器清單選項
從程式碼列出容器時,可以指定若干選項來管理從 Azure 儲存體傳回結果的方式。 您可指定要在每一組結果中傳回的結果數目,然後擷取後續集合。 您也可以按前置詞篩選結果,在結果中傳回容器中繼資料。 下列各節描述這些選項。
若要列出儲存體帳戶中的容器,請呼叫下列方法:
此方法會傳回可反覆執行的類型 ContainerProperties。 容器會依名稱按字典順序排序。
管理傳回的結果數目
根據預設,清單作業一次最多會傳回 5000 個結果。 若要傳回較小的結果集,請為 results_per_page
關鍵字引數提供非零值。
使用前置詞篩選結果
若要篩選容器清單,請為 name_starts_with
關鍵字引數指定字串或字元。 前置詞字串可包含一或多個字元。 Azure 儲存體接著只會傳回名稱開頭為該前置詞的容器。
包含容器中繼資料
若要在結果中包含容器中繼資料,請將 include_metadata
關鍵字引數設為 True
。 Azure 儲存體包含中繼資料與每個傳回的容器,因此您無須個別擷取容器中繼資料。
包含已刪除的容器
若要在結果中包含虛刪除的容器,請將 include_deleted
關鍵字引數設為 True
。
程式碼範例
下列範例會列出所有容器和中繼資料。 您可以將 include_metadata
設為 True
,以包含容器中繼資料:
def list_containers(self, blob_service_client: BlobServiceClient):
containers = blob_service_client.list_containers(include_metadata=True)
for container in containers:
print(container['name'], container['metadata'])
下列範例只會列出以 name_starts_with
參數中指定的前置詞為開頭的容器:
def list_containers_prefix(self, blob_service_client: BlobServiceClient):
containers = blob_service_client.list_containers(name_starts_with='test-')
for container in containers:
print(container['name'])
您也可以為每個頁面的結果數目指定限制。 此範例會傳入 results_per_page
並將結果分頁:
def list_containers_pages(self, blob_service_client: BlobServiceClient):
i=0
all_pages = blob_service_client.list_containers(results_per_page=5).by_page()
for container_page in all_pages:
i += 1
print(f"Page {i}")
for container in container_page:
print(container['name'])
以非同步方式列出容器
適用於 Python 的 Azure Blob 儲存體用戶端程式庫支援以非同步方式列出容器。 若要深入了解專案設定需求,請參閱非同步程式設計。
依照下列步驟,使用非同步 API 列出容器:
新增下列匯入陳述式:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
新增程式碼以使用
asyncio.run
執行程式。 此函式會執行傳遞的協同程式 (在我們的範例中為main()
),並管理asyncio
事件迴圈。 協同程式會以 async/await 語法宣告。 在此範例中,main()
協同程式會先使用async with
建立最上層BlobServiceClient
,然後呼叫列出容器的方法。 請注意,只有最上層用戶端需要使用async with
,因為從中建立的其他用戶端會共用相同的連線集區。async def main(): sample = ContainerSamples() # TODO: Replace <storage-account-name> with your actual storage account name account_url = "https://<storage-account-name>.blob.core.windows.net" credential = DefaultAzureCredential() async with BlobServiceClient(account_url, credential=credential) as blob_service_client: await sample.list_containers(blob_service_client) if __name__ == '__main__': asyncio.run(main())
新增程式碼以列出容器。 該程式碼與同步範例相同,不同之處在於該方法是以
async
關鍵字宣告的,而async for
是在呼叫list_containers
方法時使用的。async def list_containers(self, blob_service_client: BlobServiceClient): async for container in blob_service_client.list_containers(include_metadata=True): print(container['name'], container['metadata'])
完成這個基本設定後,您可以使用 async/await 語法,將本文中的其他範例實作為協同程式。
資源
若要深入了解如何使用適用於 Python 的 Azure Blob 儲存體用戶端程式庫列出容器,請參閱下列資源。
REST API 操作
Azure SDK for Python 包含建置在 Azure REST API 之上的程式庫,可讓您透過熟悉的 Python 範例與 REST API 作業進行互動。 用來列出容器的用戶端程式庫方法會使用下列 REST API 作業:
- 列出容器 (REST API)