Поделиться через


Вывод списка контейнеров BLOB-объектов с помощью Python

При перечислении контейнеров в учетной записи служба хранилища Azure из кода можно указать несколько вариантов управления возвратом результатов из служба хранилища Azure. В этой статье показано, как перечислить контейнеры с помощью клиентской библиотеки служба хранилища Azure для Python.

Сведения о перечислении контейнеров БОЛЬШИХ двоичных объектов с помощью асинхронных API см. в статье "Список контейнеров" асинхронно.

Необходимые компоненты

  • В этой статье предполагается, что у вас уже есть проект, настроенный для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для Python. Сведения о настройке проекта, включая установку пакета, добавление import инструкций и создание авторизованного клиентского объекта, см. в статье "Начало работы с Хранилище BLOB-объектов Azure и Python".
  • Механизм авторизации должен иметь разрешения для перечисления контейнеров BLOB-объектов. Дополнительные сведения см. в руководстве по авторизации для следующей операции REST API:

Сведения о параметрах перечисления контейнеров

При перечислении контейнеров из кода можно указать параметры для управления возвратом результатов из служба хранилища Azure. Можно указать число возвращаемых результатов в каждом наборе результатов, а затем извлечь последующие наборы. Вы также можете фильтровать результаты по префиксу и возвращать метаданные контейнера с результатами. Описание этих параметров приводится в следующих разделах.

Чтобы перечислить контейнеры в учетной записи хранения, вызовите следующий метод:

Этот метод возвращает итератор типа ContainerProperties. Контейнеры упорядочены лексографически по имени.

Управление количеством возвращаемых результатов

По умолчанию операция перечисления возвращает до 5000 результатов за раз. Чтобы вернуть меньший набор результатов, укажите ненулевое значение для results_per_page аргумента ключевое слово.

Фильтрация результатов с помощью префикса

Чтобы отфильтровать список контейнеров, укажите строку или символ для аргумента name_starts_with ключевое слово. Строка префикса может содержать один или несколько символов. Служба хранилища Azure возвращает только те контейнеры, имена которых начинаются с этого префикса.

Включение метаданных контейнера

Чтобы включить метаданные контейнера с результатами, задайте для аргумента include_metadataTrueключевое слово значение . служба хранилища Azure включает метаданные с каждым возвращенным контейнером, поэтому вам не нужно отдельно получить метаданные контейнера.

Включение удаленных контейнеров

Чтобы включить обратимо удаленные контейнеры с результатами, задайте для аргумента include_deleted ключевое слово значение True.

Примеры кода

В следующем примере перечислены все контейнеры и метаданные. Можно включить метаданные контейнера, задав значение include_metadataTrue:

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'])

Асинхронное перечисление контейнеров

Клиентская библиотека Хранилище BLOB-объектов Azure для Python поддерживает асинхронное перечисление контейнеров. Дополнительные сведения о требованиях к настройке проекта см. в статье асинхронное программирование.

Выполните следующие действия, чтобы перечислить контейнеры с помощью асинхронных API:

  1. Добавьте в файл следующие операторы импорта:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Добавьте код для запуска программы с помощью asyncio.run. Эта функция запускает переданную корутину в main() нашем примере и управляет циклом asyncio событий. Корутины объявляются с синтаксисом async/await. В этом примере main() корутин сначала создает верхний уровень BlobServiceClient с помощью async with, а затем вызывает метод, который перечисляет контейнеры. Обратите внимание, что использовать только клиент верхнего уровня, так как другие клиенты, созданные из него, используют 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())
    
  3. Добавьте код для перечисления контейнеров. Код совпадает с синхронным примером, за исключением того, что метод объявляется с 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.

Ресурсы

Дополнительные сведения о перечислении контейнеров с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для Python см. в следующих ресурсах.

Операции REST API

Пакет SDK Azure для Python содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API с помощью знакомых парадигм Python. Методы клиентской библиотеки для перечисления контейнеров используют следующую операцию REST API:

Примеры кода

Ресурсы клиентской библиотеки

См. также