Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek ukazuje, jak vypsat objekty blob pomocí klientské knihovny Azure Storage pro Python.
Další informace o výpisu objektů blob pomocí asynchronních rozhraní API najdete v tématu Asynchronní výpis objektů blob.
Prerequisites
- Předplatné Azure – vytvoření bezplatného předplatného
- Účet úložiště Azure – Vytvoření účtu úložiště
- Python 3.8 nebo novější
Nastavení prostředí
Pokud nemáte existující projekt, v této části se dozvíte, jak nastavit projekt pro práci s klientskou knihovnou Azure Blob Storage pro Python. Další podrobnosti najdete v tématu Začínáme se službou Azure Blob Storage a Pythonem.
Pokud chcete pracovat s příklady kódu v tomto článku, nastavte projekt pomocí následujícího postupu.
Instalace balíčků
Nainstalujte následující balíčky pomocí pip install:
pip install azure-storage-blob azure-identity
Přidejte příkazy importu
Přidejte následující import příkazy:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, ContainerClient, BlobPrefix
Authorization
Autorizační mechanismus musí mít potřebná oprávnění k výpisu objektu blob. K autorizaci pomocí Microsoft Entra ID (doporučeno) potřebujete integrovanou roli Azure RBAC Storage Blob Data Reader nebo vyšší. Další informace najdete v pokynech k autorizaci pro výpis objektů Blob (REST API).
Vytvoření objektu klienta
Pokud chcete připojit aplikaci ke službě Blob Storage, vytvořte instanci BlobServiceClient. Následující příklad ukazuje, jak pomocí DefaultAzureCredential vytvořit objekt klienta pro autorizaci.
# 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)
Můžete také vytvořit klientské objekty pro konkrétní kontejnery nebo objekty blob, a to buď přímo, nebo z objektu BlobServiceClient . Další informace o vytváření a správě klientských objektů najdete v tématu Vytváření a správa klientských objektů, které pracují s datovými prostředky.
Informace o možnostech výpisu objektů blob
Když vypíšete objekty blob ze svého kódu, můžete zadat řadu možností pro správu způsobu vrácení výsledků ze služby Azure Storage. Můžete zadat počet výsledků, které se mají vrátit v každé sadě výsledků, a pak načíst následující sady. Můžete zadat předponu pro vrácení objektů blob, jejichž názvy začínají tímto znakem nebo řetězcem. Objekty blob můžete zobrazit v ploché struktuře seznamu nebo hierarchicky. Hierarchický výpis zobrazuje objekty typu blob, jako by byly uspořádané ve složkách.
Pokud chcete vytvořit seznam blobů v kontejneru pomocí plochého výpisu, použijte jednu z těchto metod:
- ContainerClient.list_blobs (spolu s názvem můžete volitelně zahrnout metadata, značky a další informace přidružené k jednotlivým objektům blob).
- ContainerClient.list_blob_names (vrací pouze název objektu blob)
Pokud chcete zobrazit seznam objektů blob v kontejneru pomocí hierarchického výpisu, zavolejte následující metodu:
- ContainerClient.walk_blobs (spolu s názvem můžete volitelně zahrnout metadata, značky a další informace přidružené k jednotlivým objektům blob).
Filtrování výsledků pomocí předpony
Pokud chcete filtrovat seznam objektů blob, zadejte řetězec pro name_starts_with argument klíčového slova. Řetězec předpony může obsahovat jeden nebo více znaků. Azure Storage pak vrátí pouze objekty blob, jejichž názvy začínají danou předponou.
Plochý výpis versus hierarchický výpis
Objekty blob ve službě Azure Storage jsou uspořádané do plochého paradigmatu místo hierarchického paradigmatu (jako je klasický systém souborů). Objekty blob ale můžete uspořádat do virtuálních adresářů , abyste napodobili strukturu složek. Virtuální adresář tvoří část názvu objektu blob a je označen znakem oddělovače.
Pokud chcete objekty blob uspořádat do virtuálních adresářů, použijte v názvu objektu blob znak oddělovače. Výchozí znak oddělovače je lomítko (/), ale jako oddělovač můžete zadat libovolný znak.
Pokud objekty blob pojmenujete pomocí oddělovače, můžete se rozhodnout, jestli chcete objekty blob vypsat hierarchicky. Pro hierarchickou operaci výpisu vrátí Azure Storage všechny virtuální adresáře a blobové objekty pod nadřazeným objektem. Operaci výpisu můžete volat rekurzivně a procházet hierarchii podobně jako při procházení klasického systému souborů prostřednictvím kódu programu.
Použití plochého výpisu
Operace výpisu ve výchozím nastavení vrací objekty blob v plochém výpisu. V plochém výpisu nejsou blobs uspořádané podle virtuálního adresáře.
Následující příklad uvádí bloby v zadaném kontejneru pomocí plošného seznamu:
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}")
Ukázkový výstup je podobný následujícímu:
List blobs flat:
Name: file4.txt
Name: folderA/file1.txt
Name: folderA/file2.txt
Name: folderA/folderB/file3.txt
Můžete také zadat možnosti filtrování výsledků seznamu nebo zobrazit další informace. V následujícím příkladu jsou uvedeny objekty blob a značky blobů:
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']}")
Ukázkový výstup je podobný následujícímu:
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'}
Note
Zobrazený ukázkový výstup předpokládá, že máte účet úložiště s plochým oborem názvů. Pokud jste pro svůj účet úložiště povolili funkci hierarchického oboru názvů, adresáře nejsou virtuální. Místo toho jsou betonové, nezávislé objekty. V důsledku toho se adresáře v seznamu zobrazují jako objekty blob nulové délky.
Alternativní možnost výpisu při práci s hierarchickým oborem názvů najdete v tématu Výpis obsahu adresáře (Azure Data Lake Storage).
Použití hierarchického výpisu
Při hierarchickém volání operace výpisu obsahu vrátí Azure Storage virtuální adresáře a objekty blob na první úrovni hierarchie.
Pokud chcete zobrazit seznam objektů blob hierarchicky, použijte následující metodu:
Následující příklad uvádí objekty blob v zadaném kontejneru pomocí hierarchického výpisu:
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}")
Ukázkový výstup je podobný následujícímu:
folderA/
folderA/folderB/
folderA/folderB/file3.txt
folderA/file1.txt
folderA/file2.txt
file4.txt
Note
Nelze zahrnout snímky objektů blob v hierarchické operaci výpisu.
Asynchronní seznamování objektů typu blob
Klientská knihovna Azure Blob Storage pro Python podporuje asynchronní výpis objektů blob. Další informace o požadavcích na nastavení projektu najdete v tématu Asynchronní programování.
Chcete-li vypsat objekty blob pomocí asynchronních rozhraní API, použijte následující kroky:
Přidejte následující příkazy importu:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, ContainerClient, BlobPrefixPřidejte kód pro spuštění programu pomocí
asyncio.run. Tato funkce spustí předanou korutinu v našem příkladumain()a spravuje událostní smyčkuasyncio. Koroutiny jsou deklarovány syntaxí async/await. V tomto příkladumain()korutin nejprve vytváří nejvyšší úroveňBlobServiceClientpomocíasync with, a pak zavolá metodu, která vypíše bloby. Mějte na paměti, že pouze klient nejvyšší úrovně musí používatasync with, protože ostatní klienti, kteří jsou z něj vytvořeni, sdílejí stejný fond připojení.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())Přidejte kód pro seznam objektů blob. Následující příklad kódu uvádí objekty blob pomocí plochého výpisu. Kód je stejný jako synchronní příklad s tím rozdílem, že metoda je deklarována pomocí klíčového
asyncasync forslova alist_blobspoužívá se při volání metody.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}")
S tímto základním nastavením můžete další příklady v tomto článku implementovat jako korutiny pomocí syntaxe async/await.
Resources
Další informace o tom, jak vypsat objekty blob pomocí klientské knihovny azure Blob Storage pro Python, najdete v následujících zdrojích informací.
Ukázky kódu
- Zobrazení synchronních nebo asynchronních ukázek kódu z tohoto článku (GitHub)
Operace rozhraní REST API
Sada Azure SDK pro Python obsahuje knihovny, které jsou postavené na rozhraní Azure REST API a umožňují interakci s operacemi rozhraní REST API prostřednictvím známých paradigmat Pythonu. Metody klientské knihovny pro výpis objektů blob používají následující operaci rozhraní REST API:
- Seznam blobů (REST API)
Prostředky klientské knihovny
Viz také
Související obsah
- Tento článek je součástí příručky pro vývojáře služby Blob Storage pro Python. Další informace najdete v úplném seznamu článků příručky pro vývojáře na webu Sestavení aplikace v Pythonu.