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
- Azure-prenumeration – skapa en kostnadsfritt
- Azure Storage-konto – skapa ett lagringskonto
- Python 3.8+
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:
Lägg till följande importinstruktioner:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, ContainerClient, BlobPrefix
Lägg till kod för att köra programmet med .
asyncio.run
Den här funktionen kör den skickade coroutinenmain()
i vårt exempel och hanterar händelseloopenasyncio
. Coroutines deklareras med syntaxen async/await. I det här exempletmain()
skapar coroutine först den översta nivånBlobServiceClient
med ochasync with
anropar sedan metoden som visar blobarna. Observera att endast klienten på den översta nivån behöver användaasync 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())
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
ochasync for
används när metoden anropaslist_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:
- Lista blobar (REST API)
Klientbiblioteksresurser
Se även
Relaterat innehåll
- 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.