Blobs vermelden met Python
In dit artikel wordt beschreven hoe u blobs weergeeft met behulp van de Azure Storage-clientbibliotheek voor Python.
Zie List blobs asynchroon voor meer informatie over het weergeven van blobs met behulp van asynchrone API's.
Vereisten
- Azure-abonnement: u kunt een gratis abonnement nemen
- Azure Storage-account: maak een opslagaccount
- Python 3.8+
Uw omgeving instellen
Als u geen bestaand project hebt, ziet u in deze sectie hoe u een project instelt voor gebruik met de Azure Blob Storage-clientbibliotheek voor Python. Zie Aan de slag met Azure Blob Storage en Python voor meer informatie.
Als u wilt werken met de codevoorbeelden in dit artikel, volgt u deze stappen om uw project in te stellen.
Pakketten installeren
Installeer de volgende pakketten met behulp van pip install
:
pip install azure-storage-blob azure-identity
Importinstructies toevoegen
Voeg de volgende import
instructies toe:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, ContainerClient, BlobPrefix
Autorisatie
Het autorisatiemechanisme moet over de benodigde machtigingen beschikken om een blob weer te geven. Voor autorisatie met Microsoft Entra-id (aanbevolen) hebt u ingebouwde Azure RBAC-rol opslagblobgegevenslezer of hoger nodig. Zie de autorisatierichtlijnen voor List Blobs (REST API) voor meer informatie.
Een clientobject maken
Als u een app wilt verbinden met Blob Storage, maakt u een exemplaar van BlobServiceClient. In het volgende voorbeeld ziet u hoe u een clientobject maakt met behulp van DefaultAzureCredential
autorisatie:
# 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)
U kunt ook clientobjecten maken voor specifieke containers of blobs, rechtstreeks of vanuit het BlobServiceClient
object. Zie Clientobjecten maken en beheren die interactie hebben met gegevensbronnen voor meer informatie over het maken en beheren van clientobjecten.
Over opties voor blobvermelding
Wanneer u blobs uit uw code weergeeft, kunt u veel opties opgeven om te beheren hoe resultaten worden geretourneerd vanuit Azure Storage. U kunt het aantal resultaten opgeven dat moet worden geretourneerd in elke set resultaten en vervolgens de volgende sets ophalen. U kunt een voorvoegsel opgeven om blobs te retourneren waarvan de namen beginnen met dat teken of die tekenreeks. En u kunt blobs in een platte lijststructuur of hiërarchisch weergeven. Een hiërarchische vermelding retourneert blobs alsof ze zijn ingedeeld in mappen.
Als u de blobs in een container wilt weergeven met behulp van een platte vermelding, roept u een van de volgende methoden aan:
- ContainerClient.list_blobs (samen met de naam kunt u eventueel metagegevens, tags en andere informatie opnemen die aan elke blob is gekoppeld)
- ContainerClient.list_blob_names (retourneert alleen de blobnaam)
Als u de blobs in een container wilt weergeven met behulp van een hiërarchische vermelding, roept u de volgende methode aan:
- ContainerClient.walk_blobs (samen met de naam kunt u eventueel metagegevens, tags en andere informatie toevoegen die aan elke blob is gekoppeld)
Resultaten filteren met een voorvoegsel
Als u de lijst met blobs wilt filteren, geeft u een tekenreeks op voor het name_starts_with
trefwoordargument. De tekenreeks voor het voorvoegsel kan een of meer tekens bevatten. Azure Storage retourneert vervolgens alleen de blobs waarvan de namen beginnen met dat voorvoegsel.
Platte vermelding versus hiërarchische vermelding
Blobs in Azure Storage zijn ingedeeld in een plat paradigma in plaats van een hiërarchisch paradigma (zoals een klassiek bestandssysteem). U kunt blobs echter in virtuele mappen ordenen om een mapstructuur na te bootsen. Een virtuele map maakt deel uit van de naam van de blob en wordt aangegeven door het scheidingsteken.
Als u blobs wilt ordenen in virtuele mappen, gebruikt u een scheidingsteken in de blobnaam. Het standaardteken voor scheidingstekens is een slash (/), maar u kunt elk teken opgeven als scheidingsteken.
Als u de naam van uw blobs opgeeft met behulp van een scheidingsteken, kunt u ervoor kiezen om blobs hiërarchisch weer te geven. Voor een hiërarchische vermeldingsbewerking retourneert Azure Storage alle virtuele mappen en blobs onder het bovenliggende object. U kunt de vermeldingsbewerking recursief aanroepen om de hiërarchie te doorlopen, vergelijkbaar met de manier waarop u een klassiek bestandssysteem programmatisch zou doorlopen.
Een platte vermelding gebruiken
Standaard retourneert een vermeldingsbewerking blobs in een platte vermelding. In een platte vermelding worden blobs niet geordend op virtuele map.
In het volgende voorbeeld worden de blobs in de opgegeven container vermeld met behulp van een platte vermelding:
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}")
Voorbeelduitvoer is vergelijkbaar met:
List blobs flat:
Name: file4.txt
Name: folderA/file1.txt
Name: folderA/file2.txt
Name: folderA/folderB/file3.txt
U kunt ook opties opgeven om lijstresultaten te filteren of aanvullende informatie weer te geven. In het volgende voorbeeld worden blobs en blobtags vermeld:
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']}")
Voorbeelduitvoer is vergelijkbaar met:
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'}
Notitie
In de voorbeelduitvoer wordt ervan uitgegaan dat u een opslagaccount met een platte naamruimte hebt. Als u de hiërarchische naamruimtefunctie voor uw opslagaccount hebt ingeschakeld, zijn mappen niet virtueel. In plaats daarvan zijn ze concrete, onafhankelijke objecten. Als gevolg hiervan worden mappen in de lijst weergegeven als blobs met lengte nul.
Zie De inhoud van de lijstmap (Azure Data Lake Storage) voor een alternatieve vermeldingsoptie wanneer u met een hiërarchische naamruimte werkt.
Een hiërarchische vermelding gebruiken
Wanneer u een vermeldingsbewerking hiërarchisch aanroept, retourneert Azure Storage de virtuele mappen en blobs op het eerste niveau van de hiërarchie.
Gebruik de volgende methode om blobs hiërarchisch weer te geven:
In het volgende voorbeeld worden de blobs in de opgegeven container weergegeven met behulp van een hiërarchische lijst:
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}")
Voorbeelduitvoer is vergelijkbaar met:
folderA/
folderA/folderB/
folderA/folderB/file3.txt
folderA/file1.txt
folderA/file2.txt
file4.txt
Notitie
Blob-momentopnamen kunnen niet worden weergegeven in een hiërarchische lijstbewerking.
Blobs asynchroon vermelden
De Azure Blob Storage-clientbibliotheek voor Python biedt ondersteuning voor het asynchroon weergeven van blobs. Zie Asynchrone programmering voor meer informatie over de vereisten voor het instellen van projecten.
Volg deze stappen om blobs weer te geven met behulp van asynchrone API's:
Voeg de volgende importinstructies toe:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, ContainerClient, BlobPrefix
Voeg code toe om het programma uit te voeren met behulp van
asyncio.run
. Met deze functie wordt de doorgegeven coroutine uitgevoerd inmain()
ons voorbeeld en wordt deasyncio
gebeurtenislus beheerd. Coroutines worden gedeclareerd met de syntaxis async/await. In dit voorbeeld maakt demain()
coroutine eerst het hoogste niveauBlobServiceClient
met behulp vanasync with
en roept vervolgens de methode aan waarmee de blobs worden vermeld. Houd er rekening mee dat alleen de client op het hoogste niveau moet worden gebruiktasync with
, omdat andere clients die ermee zijn gemaakt, dezelfde verbindingsgroep delen.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())
Voeg code toe om de blobs weer te geven. In het volgende codevoorbeeld worden blobs vermeld met behulp van een platte vermelding. De code is hetzelfde als het synchrone voorbeeld, behalve dat de methode wordt gedeclareerd met het
async
trefwoord enasync for
wordt gebruikt bij het aanroepen van delist_blobs
methode.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}")
Met deze basisinstallatie kunt u andere voorbeelden in dit artikel implementeren als coroutines met behulp van async/await syntaxis.
Resources
Zie de volgende resources voor meer informatie over het weergeven van blobs met behulp van de Azure Blob Storage-clientbibliotheek voor Python.
Codevoorbeelden
- Synchrone of asynchrone codevoorbeelden weergeven uit dit artikel (GitHub)
REST API-bewerkingen
De Azure SDK voor Python bevat bibliotheken die zijn gebaseerd op de Azure REST API, zodat u kunt communiceren met REST API-bewerkingen via bekende Python-paradigma's. De clientbibliotheekmethoden voor het weergeven van blobs gebruiken de volgende REST API-bewerking:
Clientbibliotheekbronnen
Zie ook
Gerelateerde inhoud
- Dit artikel maakt deel uit van de ontwikkelaarshandleiding voor Blob Storage voor Python. Zie de volledige lijst met artikelen over ontwikkelaarshandleidingen in Uw Python-app bouwen voor meer informatie.