Lista blobar med Python

Den här artikeln visar hur du listar blobar med hjälp av Azure Storage-klientbiblioteket för Python.

Mer information om hur du listar blobar med asynkrona API:er finns i Lista blobar asynkront.

Förutsättningar

  • Den här artikeln förutsätter att du redan har ett projekt konfigurerat för att fungera med Azure Blob Storage-klientbiblioteket för Python. Mer information om hur du konfigurerar projektet, inklusive paketinstallation, tillägg import av instruktioner och skapande av ett auktoriserat klientobjekt finns i Komma igång med Azure Blob Storage och Python.
  • Information om hur du använder asynkrona API:er i koden finns i kraven i avsnittet Asynkron programmering .
  • Auktoriseringsmekanismen måste ha behörighet att lista blobar. Mer information finns i auktoriseringsvägledningen för följande REST API-åtgärd:

Om alternativ för bloblistning

När du listar blobar från koden kan du ange många alternativ för att hantera hur resultaten returneras från Azure Storage. Du kan ange hur många resultat som ska returneras i varje resultatuppsättning och sedan hämta efterföljande uppsättningar. Du kan ange ett prefix för att returnera blobar vars namn börjar med det tecknet eller strängen. Och du kan lista blobar i en platt liststruktur, eller hierarkiskt. En hierarkisk lista returnerar blobar som om de vore ordnade i mappar.

Om du vill visa en lista över blobarna i en container med en platt lista anropar du någon av följande metoder:

  • ContainerClient.list_blobs (tillsammans med namnet kan du inkludera metadata, taggar och annan information som är associerad med varje blob)
  • ContainerClient.list_blob_names (returnerar endast blobnamn)

Om du vill lista blobarna i en container med hjälp av en hierarkisk lista anropar du följande metod:

  • ContainerClient.walk_blobs (tillsammans med namnet kan du inkludera metadata, taggar och annan information som är associerad med varje blob)

Filtrera resultat med ett prefix

Om du vill filtrera listan över blobar anger du en sträng för nyckelordsargumentet name_starts_with . Prefixsträngen kan innehålla ett eller flera tecken. Azure Storage returnerar sedan endast de blobar vars namn börjar med prefixet.

Flat listning jämfört med hierarkisk lista

Blobar i Azure Storage är ordnade i ett platt paradigm snarare än ett hierarkiskt paradigm (som ett klassiskt filsystem). Du kan dock ordna blobar i virtuella kataloger för att efterlikna en mappstruktur. En virtuell katalog utgör en del av blobens namn och indikeras av avgränsartecknet.

Om du vill organisera blobar i virtuella kataloger använder du ett avgränsartecken i blobnamnet. Standardtecken för avgränsare är ett snedstreck (/), men du kan ange valfritt tecken som avgränsare.

Om du namnger dina blobar med en avgränsare kan du välja att lista blobar hierarkiskt. För en hierarkisk listningsåtgärd returnerar Azure Storage alla virtuella kataloger och blobbar under det överordnade objektet. Du kan anropa listningsåtgärden rekursivt för att korsa hierarkin, ungefär som du skulle gå igenom ett klassiskt filsystem programmatiskt.

Använd en platt lista

Som standard returnerar en liståtgärd blobar i en platt lista. I en platt lista ordnas inte blobar efter virtuell katalog.

I följande exempel visas blobarna i den angivna containern med en platt lista:

def list_blobs_flat(self, blob_service_client: BlobServiceClient, container_name):
    container_client = blob_service_client.get_container_client(container=container_name)

    blob_list = container_client.list_blobs()

    for blob in blob_list:
        print(f"Name: {blob.name}")

Exempelutdata liknar:

List blobs flat:
Name: file4.txt
Name: folderA/file1.txt
Name: folderA/file2.txt
Name: folderA/folderB/file3.txt

Du kan också ange alternativ för att filtrera listresultat eller visa ytterligare information. I följande exempel visas blobar och blobtaggar:

def list_blobs_flat_options(self, blob_service_client: BlobServiceClient, container_name):
    container_client = blob_service_client.get_container_client(container=container_name)

    blob_list = container_client.list_blobs(include=['tags'])

    for blob in blob_list:
        print(f"Name: {blob['name']}, Tags: {blob['tags']}")

Exempelutdata liknar:

List blobs flat:
Name: file4.txt, Tags: None
Name: folderA/file1.txt, Tags: None
Name: folderA/file2.txt, Tags: None
Name: folderA/folderB/file3.txt, Tags: {'tag1': 'value1', 'tag2': 'value2'}

Kommentar

Exempelutdata som visas förutsätter att du har ett lagringskonto med ett platt namnområde. Om du har aktiverat den hierarkiska namnområdesfunktionen för ditt lagringskonto är kataloger inte virtuella. I stället är de konkreta, oberoende föremål. Därför visas kataloger i listan som blobar med noll längd.

Ett alternativt listalternativ när du arbetar med ett hierarkiskt namnområde finns i Listkataloginnehåll (Azure Data Lake Storage Gen2).

Använda en hierarkisk lista

När du anropar en liståtgärd hierarkiskt returnerar Azure Storage de virtuella katalogerna och blobarna på den första nivån i hierarkin.

Om du vill lista blobar hierarkiskt använder du följande metod:

I följande exempel visas blobarna i den angivna containern med hjälp av en hierarkisk lista:

depth = 0
indent = "  "
def list_blobs_hierarchical(self, container_client: ContainerClient, prefix):
    for blob in container_client.walk_blobs(name_starts_with=prefix, delimiter='/'):
        if isinstance(blob, BlobPrefix):
            # Indentation is only added to show nesting in the output
            print(f"{self.indent * self.depth}{blob.name}")
            self.depth += 1
            self.list_blobs_hierarchical(container_client, prefix=blob.name)
            self.depth -= 1
        else:
            print(f"{self.indent * self.depth}{blob.name}")

Exempelutdata liknar:

folderA/
  folderA/folderB/
    folderA/folderB/file3.txt
  folderA/file1.txt
  folderA/file2.txt
file4.txt

Kommentar

Blobögonblicksbilder kan inte visas i en hierarkisk listningsåtgärd.

Visa en lista över blobar asynkront

Azure Blob Storage-klientbiblioteket för Python har stöd för att visa blobar asynkront. Mer information om krav för projektkonfiguration finns i Asynkron programmering.

Följ dessa steg för att lista blobar med asynkrona API:er:

  1. Lägg till följande importinstruktioner:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, ContainerClient, BlobPrefix
    
  2. Lägg till kod för att köra programmet med .asyncio.run Den här funktionen kör den skickade coroutinen main() i vårt exempel och hanterar händelseloopen asyncio . Coroutines deklareras med syntaxen async/await. I det här exemplet main() skapar coroutine först den översta nivån BlobServiceClient med och async withanropar sedan metoden som visar blobarna. Observera att endast klienten på den översta nivån behöver använda async with, eftersom andra klienter som skapats från den delar samma anslutningspool.

    async def main():
        sample = BlobSamples()
    
        # 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_blobs_flat(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Lägg till kod för att lista blobarna. I följande kodexempel visas blobar med en platt lista. Koden är samma som det synkrona exemplet, förutom att metoden deklareras med nyckelordet async och async for används när metoden anropas list_blobs .

    async def list_blobs_flat(self, blob_service_client: BlobServiceClient, container_name):
        container_client = blob_service_client.get_container_client(container=container_name)
    
        async for blob in container_client.list_blobs():
            print(f"Name: {blob.name}")
    

Med den här grundläggande konfigurationen på plats kan du implementera andra exempel i den här artikeln som coroutines med hjälp av async/await-syntax.

Resurser

Mer information om hur du listar blobar med hjälp av Azure Blob Storage-klientbiblioteket för Python finns i följande resurser.

REST API-åtgärder

Azure SDK för Python innehåller bibliotek som bygger på Azure REST API så att du kan interagera med REST API-åtgärder via välbekanta Python-paradigm. Klientbiblioteksmetoderna för att visa blobar använder följande REST API-åtgärd:

Kodexempel

Klientbiblioteksresurser

Se även