Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan lehet a Azure Storage klienskönyvtár segítségével felsorolni a blobokat a Python számára.
Ha szeretnél megtudni a blobok listázásáról aszinkron API-k használatával, lásd: Foltok aszinkron listázása.
Előfeltételek
- Azure-előfizetés – hozzon létre egyet ingyenesen
- Azure Storage-fiók – tárfiók létrehozása
- Python 3,8+
Saját környezet beállítása
Ha nem rendelkezik meglévő projekttel, ez a szakasz bemutatja, hogyan állíthat be egy projektet a PythonHoz készült Azure Blob Storage ügyfélkódtár használatához. További részletekért tekintse meg az Azure Blob Storage és a Python használatának első lépéseit.
A jelen cikkben szereplő példakódok használatához kövesse az alábbi lépéseket a projekt beállításához.
Csomagok telepítése
Telepítse a következő csomagokat a(z) pip install használatával:
pip install azure-storage-blob azure-identity
Importálási utasítások hozzáadása
Adja hozzá a következő import-utasításokat:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, ContainerClient, BlobPrefix
Engedélyezés
Az engedélyezési mechanizmusnak rendelkeznie kell a blobok listázásához szükséges engedélyekkel. A Microsoft Entra ID-val történő jogosultságkezeléshez (ajánlott) az Azure RBAC beépített Storage Blob Data Reader szerepköre vagy magasabb szintű szerepkör szükséges. További információkért tekintse meg a Blobok listázása (REST API) engedélyezési útmutatóját.
Ügyfélobjektum létrehozása
Ha egy alkalmazást a Blob Storage-hoz szeretne csatlakoztatni, hozzon létre egy BlobServiceClient-példányt. Az alábbi példa bemutatja, hogyan hozhat létre ügyfélobjektumot DefaultAzureCredential engedélyezés céljából:
# 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)
Ügyfélobjektumokat is létrehozhat adott tárolókhoz vagy blobokhoz közvetlenül vagy az BlobServiceClient objektumból. Az ügyfélobjektumok létrehozásáról és kezeléséről további információt az adaterőforrásokat kezelő ügyfélobjektumok létrehozása és kezelése című témakörben talál.
Tudnivalók a blobok listázási beállításairól
Amikor a kódból felsorolod a foltokat, sok beállítást megadhatsz annak kezelésére, hogyan térnek vissza az eredmények az Azure Storage-ból. Megadhatja az egyes találathalmazokban visszaadandó eredmények számát, majd lekérheti a következő halmazokat. Megadhat egy előtagot, amely visszaadja azokat a blobokat, amelyeknek a neve ezzel a karakterrel vagy sztringgel kezdődik. A foltokat lapos listázási struktúrában vagy hierarchikusan is felsorolhatod. A hierarchikus lista a blobokat úgy adja vissza, mintha mappákba rendezték volna őket.
A tárolóban lévő foltok lapos listázással való listázásához hívjuk az alábbi módszerek egyikét:
- ContainerClient.list_blobs (a név mellett opcionálisan tartalmazzák metaadatokat, címkéket és egyéb információkat, amelyek minden folbhoz kapcsolódnak)
- ContainerClient.list_blob_names (csak blobnevet ad vissza)
A foltok listázásához egy konténerben hierarchikus listázással hívjuk a következő módszert:
- ContainerClient.walk_blobs (a név mellett opcionálisan tartalmaz metaadatokat, címkéket és egyéb, az egyes foltokhoz kapcsolódó információkat)
Eredmények szűrése előtaggal
A blobok listájának szűréséhez adjon meg egy sztringet a name_starts_with kulcsszóargumentumhoz. Az előtag sztringje egy vagy több karaktert tartalmazhat. Az Azure Storage csak azokat a foltokat adja vissza, amelyek neve ezzel az előtaggal kezdődik.
Egybesimított lista és hierarchikus lista
Az Azure Storage-blobok hierarchikus paradigma helyett egy lapos paradigma szerint vannak rendszerezve (például egy klasszikus fájlrendszerben). Ugyanakkor a foltokat virtuális könyvtárakba rendezheted, hogy utánozzanak egy mappászerkezetet. A virtuális címtár a blob nevének része, és a határoló karakter jelzi.
A blobok virtuális könyvtárakba rendezéséhez használjon elválasztó karaktert a blob nevében. Az alapértelmezett elválasztó karakter egy perjel (/), de bármely karaktert megadhat elválasztóként.
Ha a foltokat egy elválasztóval nevezed el, hierarchikusan sorolhatod fel a foltokat. Hierarchikus listázási művelet esetén az Azure Storage visszaadja a szülőobjektum alatti virtuális könyvtárakat és blobokat. A listázási műveletet rekurzívan hívhatja meg a hierarchia átjárásához, hasonlóan ahhoz, ahogyan egy klasszikus fájlrendszert programozott módon léptetne át.
Egyszerű lista használata
A listázási művelet alapértelmezés szerint egy egyszerű lista blobjait adja vissza. Egy egyszerű lista esetében a blobokat nem a virtuális címtár rendezi.
Az alábbi példa a megadott konténerben lévő tömböket sorolja fel egy lapos listázással:
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}")
A mintakimenet a következőhöz hasonló:
List blobs flat:
Name: file4.txt
Name: folderA/file1.txt
Name: folderA/file2.txt
Name: folderA/folderB/file3.txt
Megadhatod az eredmények szűrését vagy további információk megjelenítését is. Az alábbi példa blobokat és blobcímkéket sorol fel:
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']}")
A mintakimenet a következőhöz hasonló:
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'}
Megjegyzés
A megjelenített mintakimenet feltételezi, hogy egy egyszerű névtérrel rendelkező tárfiókkal rendelkezik. Ha bekapcsolod a hierarchikus névtér funkciót a tárolófiókodhoz, a könyvtárak nem virtuálisak. Ehelyett konkrét, független tárgyak. Ennek eredményeképpen a címtárak nulla hosszúságú blobként jelennek meg a listában.
A hierarchikus névtér használatakor alternatív listabeállítást a címtártartalom listázása (Azure Data Lake Storage) című témakörben talál.
Hierarchikus lista használata
Ha hierarchikusan meghív egy listázási műveletet, az Azure Storage a hierarchia első szintjén adja vissza a virtuális könyvtárakat és blobokat.
A blobok hierarchikus listázásához használja a következő módszert:
Az alábbi példa a megadott tárolóban lévő blobokat sorolja fel hierarchikus lista használatával:
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}")
A mintakimenet a következőhöz hasonló:
folderA/
folderA/folderB/
folderA/folderB/file3.txt
folderA/file1.txt
folderA/file2.txt
file4.txt
Megjegyzés
A blob pillanatképek nem lehetnek felsorolva hierarchikus listázási műveletben.
Blobok aszinkron listázása
A Pythonhoz készült Azure Blob Storage ügyfélkódtár a blobok aszinkron felsorolását támogatja. A projektbeállítási követelményekről további információt az Aszinkron programozás című témakörben talál.
Kövesse ezeket a lépéseket, hogy aszinkron API-k segítségével listázd a folbokat:
Adja hozzá a következő importálási utasításokat:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, ContainerClient, BlobPrefixKódot adj hozzá a program futtatásához
asyncio.run. Ez a függvény futtatja az ebben a példában szereplőmain()átadott korutint, és kezeli aasyncioeseményciklust. A korutinokat az async/await szintaxis használatával deklarálják. Ebben a példában amain()korutin először aasync withhasználatával hozza létre a legfelső szintűBlobServiceClient-t, majd meghívja a blobok listázására szolgáló metódust. Csak a legfelső szintű ügyfélnek kell használniaasync with, mivel az abból létrehozott többi ügyfél ugyanazt a kapcsolatkészletet használja.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())Adjon hozzá kódot a blobok listázásához. Az alábbi kódpélda a foltokat egy lapos listázással sorolja fel. A kód ugyanaz, mint a szinkron példában, azzal a kivétellel, hogy a metódus a
asynckulcsszóval van deklarálva, és alist_blobsmetódus meghívásakor aasync forkulcsszót használják.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}")
Ezzel az alapvető beállítással a cikkben szereplő további példákat is korutinként valósíthatod meg az async/await szintaxis használatával.
Foltok listázása Apache Arrow formátumban (előzetes)
Important
A foltok Apache Arrow formátumban történő listázása jelenleg az ELŐNÉZETben van. Ehhez a forgatókönyvhöz szükség van az Azure Blob Storage klienskönyvtárának béta (előnézetes) verziójára a Python számára (például azure-storage-blob12.31.0b1 vagy újabb előzetes). Az előzetes verziójú funkciók szolgáltatásszintű szerződés nélkül érhetők el, és éles számítási feladatokhoz nem ajánlottak. Lehet, hogy bizonyos funkciók nem támogatottak, vagy korlátozott képességekkel rendelkeznek. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verzióhoz.
Ez a képesség a meglévő List Blobs API-ra épül. Az alapértelmezett XML helyett a kompakt, oszlopos Apache Arrow formátumot használja válaszformátumként a vezetéken. Engedélyezed, ha egyetlen opciót állítsz be a konténerlistázási híváson. A Python SDK a háttérben dekódolja az Apache Arrow-t, és ugyanazokat az objektumokat adja visszaBlobProperties. Ez a megközelítés javítja a listázás áteresztőképességét, és csökkenti az ügyféloldali CPU-t nagy konténerek felsorolásakor. Megőrzi azt a válaszszerződést, amelyre a jelentkezések támaszkodnak.
Warning
A blobok listázása Apache Arrow formátumban nem támogatott olyan tárolófiókokon, amelyeknek hierarchikus névtér (Azure Data Lake Storage) van engedélyezve.
Az Apache Arrow formátumú eredmények kéréséhez állítsuk be a response_format kulcsszó argumentumot arra "arrow" , amikor ContainerClient.list_blobs vagy ContainerClient.list_blob_names hívod. Az Apache Arrow kimenet használatakor beállíthatod a start_from és end_before kulcsszavas argumentumokat is, hogy szabályozd a visszatérő utak tartományát.
Megjegyzés
A használathoz response_format="arrow" a nanoarrow csomag telepítése szükséges.
Az alábbi példa felsorolja a konténerben lévő foltokat, és az eredményeket Apache Arrow formátumban kéri:
# response_format="arrow" requires the nanoarrow package to be installed
blob_list = container_client.list_blobs(
name_starts_with="folderA/",
response_format="arrow",
)
for blob in blob_list:
print("Name: " + blob.name)
Források
Ha többet szeretne megtudni arról, hogyan listázhatók a blobok az Azure Blob Storage Pythonhoz készült ügyfélkönyvtárának használatával, tekintse meg az alábbi forrásokat.
Kódminták
REST API-műveletek
Az Azure SDK for Python könyvtárakat tartalmaz, amelyek az Azure REST API-ra épülnek. Ezeknek a könyvtáraknak a használatával a REST API műveleteket ismerős Python paradigmákon keresztül lehet kezelni. A blobok felsorolására szolgáló ügyfélkódtár-metódusok a következő REST API-műveletet használják:
- Blobok listázása (REST API)
Ügyfélkódtár erőforrásai
Lásd még
Kapcsolódó tartalom
- Ez a cikk a Python Blob Storage fejlesztői útmutatójának része. További információkért tekintse meg a Python-alkalmazás buildeléséhez kapcsolódó fejlesztői útmutatók teljes listáját.