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

Konfigurera din miljö

Om du inte har ett befintligt projekt visar det här avsnittet hur du konfigurerar ett projekt för att arbeta med Azure Blob Storage-klientbiblioteket för Python. Mer information finns i Kom igång med Azure Blob Storage och Python.

Följ de här stegen för att konfigurera projektet om du vill arbeta med kodexemplen i den här artikeln.

Installera paket

Installera följande paket med :pip install

pip install azure-storage-blob azure-identity

Lägga till importinstruktioner

Lägg till följande import-uttryck:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, ContainerClient, BlobPrefix

Auktorisering

Auktoriseringsmekanismen måste ha de behörigheter som krävs för att lista en blob. För auktorisering med Microsoft Entra-ID (rekommenderas) behöver du den inbyggda Azure RBAC-rollen Storage Blob Data Reader eller senare. Mer information finns i auktoriseringsvägledningen för REST-API (List Blobs).

Skapa ett klientobjekt

Om du vill ansluta en app till Blob Storage skapar du en instans av BlobServiceClient. I följande exempel visas hur du skapar ett klientobjekt med hjälp av DefaultAzureCredential för auktorisering:

# 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)

Du kan också skapa klientobjekt för specifika containrar eller blobar, antingen direkt eller från objektet BlobServiceClient . Mer information om hur du skapar och hanterar klientobjekt finns i Skapa och hantera klientobjekt som interagerar med dataresurser.

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 alternativ för listalternativ när du arbetar med ett hierarkiskt namnområde finns i Listkataloginnehåll (Azure Data Lake Storage).

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.

Kodexempel

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:

Klientbiblioteksresurser

Se även

  • Den här artikeln är en del av utvecklarguiden för Blob Storage för Python. Mer information finns i den fullständiga listan över utvecklarguideartiklar i Skapa din Python-app.