Enumeración de contenedores de blobs con Python
Al enumerar los contenedores de una cuenta de Azure Storage desde el código, puede especificar varias opciones para administrar cómo se devuelven los resultados de Azure Storage. En este artículo se muestra cómo enumerar contenedores con la biblioteca cliente de Azure Storage para Python.
Para obtener información sobre cómo enumerar contenedores de blobs mediante API asincrónicas, consulte Lista de contenedores de forma asincrónica.
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- Una cuenta de Azure Storage: cree una cuenta de almacenamiento
- Python 3.8 y versiones posteriores
Configurar el entorno
Si no tiene un proyecto existente, en esta sección se muestra cómo configurar uno para que funcione con la biblioteca cliente de Azure Blob Storage para Python. Para más información, vea Introducción a Azure Blob Storage y Python.
Para trabajar con los ejemplos de código de este artículo, siga los pasos siguientes a fin de configurar el proyecto.
Instalar paquetes
Instale los siguientes paquetes mediante pip install
:
pip install azure-storage-blob azure-identity
Adición de instrucciones import
Agregue las instrucciones siguientes import
:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Authorization
El mecanismo de autorización debe tener los permisos necesarios para enumerar contenedores de blobs. Para la autorización con Microsoft Entra ID (recomendado) se necesita el rol integrado de RBAC de Azure de Colaborador de datos de Storage Blob o superior. Para obtener más información, consulte la guía de autorización para Contenedores de lista (API de REST).
Creación de un objeto de cliente
Para conectar una aplicación a Blob Storage, cree una instancia de BlobServiceClient. En el ejemplo siguiente se muestra cómo crear un objeto de cliente mediante DefaultAzureCredential
para la autorización:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)
También puede crear objetos de cliente para contenedores o blobs específicos ya sea directamente o desde el objeto BlobServiceClient
. Para obtener más información sobre cómo crear y administrar objetos de cliente, consulte Crear y administrar objetos de cliente que interactúan con los recursos de datos.
Acerca de las opciones de listado de contenedores
Al enumerar blobs desde el código, puede especificar opciones para administrar cómo se devuelven los resultados de Azure Storage. Puede especificar el número de resultados que se van a devolver en cada conjunto de resultados y luego recuperar los conjuntos subsiguientes. También puede filtrar los resultados por un prefijo y devolver metadatos de contenedor con los resultados. Estas opciones se describen en las secciones siguientes.
Para enumerar los contenedores de la cuenta de almacenamiento, llame al método siguiente:
Este método devuelve una iteración de tipo ContainerProperties. Los contenedores se ordenan lexicográficamente por nombre.
Administración del número de resultados que se devuelven
De forma predeterminada, una operación de enumeración devuelve hasta 5000 resultados a la vez. Para devolver un conjunto más pequeño de resultados, proporcione un valor distinto de cero para el argumento de palabra results_per_page
clave.
Filtrado de los resultados con un prefijo
Para filtrar la lista de contenedores, especifique una cadena o un carácter para el parámetro name_starts_with
. La cadena de prefijo puede incluir uno o varios caracteres. Después, Azure Storage solo devuelve los contenedores cuyos nombres empiecen por ese prefijo.
Incluir metadatos de contenedor
Para incluir los metadatos del contenedor con los resultados, establezca el argumento de palabra clave include_metadata
en True
. Azure Storage incluye metadatos con cada contenedor devuelto, por lo que no es necesario capturar también los metadatos del contenedor.
Incluir contenedores eliminados
Para incluir contenedores eliminados temporalmente con los resultados, establezca el argumento de palabra clave include_deleted
en True
.
Ejemplos de código
En el ejemplo siguiente se enumeran todos los contenedores y los metadatos. Puede incluir metadatos de contenedor estableciendo include_metadata
en 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'])
En el ejemplo siguiente solo se enumeran los contenedores que comienzan por un prefijo especificado en el parámetro 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'])
También puede especificar un límite para el número de resultados por página. En este ejemplo se pasa results_per_page
y se paginan los resultados:
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'])
Lista de contenedores de forma asincrónica
La biblioteca cliente de Azure Blob Storage para Python admite el listado de contenedores de forma asíncrona. Para obtener más información sobre los requisitos de configuración del proyecto, consulte Programación asincrónica.
Siga estos pasos listar contenedores mediante API asíncronas:
Agregue las siguientes instrucciones import:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
Agregue código para ejecutar el programa mediante
asyncio.run
. Esta función ejecuta la corrutina pasada,main()
en nuestro ejemplo, y administra el bucle de eventosasyncio
. Las corrutinas se declaran con la sintaxis async/await. En este ejemplo, elmain()
corrutina crea primero el de nivel superiorBlobServiceClient
medianteasync with
luego llama al método que lista los contenedores. Tenga en cuenta que solo el cliente de nivel superior debe usarasync with
, ya que otros clientes creados a partir de él comparten el mismo grupo de conexiones.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())
Agregue código para la lista de contenedores. El código es el mismo que el ejemplo sincrónico, salvo que el método se declara con la palabra clave
async
y se usaasync for
al llamar al métodolist_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'])
Con esta configuración básica, puede implementar otros ejemplos de este artículo como corrutinas mediante la sintaxis async/await.
Recursos
Para obtener más información sobre cómo crear listas de contenedores con la biblioteca cliente de Azure Blob Storage para Python, consulte los recursos siguientes.
Ejemplos de código
- Ver ejemplo de código sincrónicos o asincrónicos de este artículo (GitHub)
Operaciones de API REST
El SDK de Azure para Python contiene bibliotecas que se crean a partir de la API REST de Azure, lo que le permite interactuar con las operaciones de API REST a través de paradigmas conocidos de Python. Los métodos de la biblioteca cliente para crear listas de contenedores usan esta operación de API de REST:
- List Containers (API REST)
Recursos de la biblioteca cliente
- Documentación de referencia de la biblioteca cliente
- Código fuente de la biblioteca del cliente
- Paquete (PyPi)
Consulte también
Contenido relacionado
- Este artículo forma parte de la guía para desarrolladores de Blob Storage para Python. Para más información, consulte la lista completa de artículos de la guía para desarrolladores en Compilación de la aplicación de Python.