Megosztás a következőn keresztül:


Blobok listázása Pythonnal

Ez a cikk bemutatja, hogyan listázhatja a blobokat a Pythonhoz készült Azure Storage ügyfélkódtár használatával.

A blobok aszinkron API-k használatával történő listázásáról további információt a blobok aszinkron listázása című témakörben talál.

Előfeltételek

  • Ez a cikk feltételezi, hogy már van egy projektje, amely a PythonHoz készült Azure Blob Storage ügyfélkódtárral működik együtt. Ha többet szeretne megtudni a projekt beállításáról, beleértve a csomagtelepítést, az utasítások hozzáadását import és egy engedélyezett ügyfélobjektum létrehozását, olvassa el az Azure Blob Storage és a Python használatának első lépéseit.
  • Ha aszinkron API-kat szeretne használni a kódban, tekintse meg az Aszinkron programozási szakasz követelményeit.
  • Az engedélyezési mechanizmusnak rendelkeznie kell a blobok listázásához szükséges engedélyekkel. További információkért tekintse meg az alábbi REST API-művelet engedélyezési útmutatóját:

Tudnivalók a bloblista beállításairól

Ha blobokat listáz a kódból, számos lehetőséget megadhat az eredmények Azure Storage-ból való visszaadására. 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 blobokat egy lapos listaszerkezetben vagy hierarchikusan is listázhatja. A hierarchikus lista a blobokat úgy adja vissza, mintha mappákba rendezték volna őket.

Ha egy tárolóban lévő blobokat egy egyszerű listaelem használatával szeretné listázni, hívja meg az alábbi módszerek egyikét:

  • ContainerClient.list_blobs (a név mellett az egyes blobokhoz társított metaadatokat, címkéket és egyéb információkat is megadhat)
  • ContainerClient.list_blob_names (csak blobnevet ad vissza)

Ha hierarchikus lista használatával szeretné listázni a tárolóban lévő blobokat, hívja meg a következő metódust:

  • ContainerClient.walk_blobs (a név mellett az egyes blobokhoz társított metaadatokat, címkéket és egyéb információkat is megadhat)

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 ezután csak azokat a blobokat adja vissza, amelyeknek a 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). A blobokat azonban virtuális könyvtárakba rendezheti a mappastruktúra utánzásához. 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 elválasztójel használatával nevezi el a blobokat, választhatja, hogy hierarchikusan listázni szeretné a blobokat. 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 tárolóban lévő blobokat sorolja fel egy egyszerű listaelem használatával:

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

Megadhatja a listaeredmények szűrésére vagy további információk megjelenítésére vonatkozó beállításokat 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'}

Feljegyzés

A megjelenített mintakimenet feltételezi, hogy egy egyszerű névtérrel rendelkező tárfiókkal rendelkezik. Ha engedélyezte a tárfiók hierarchikus névtér funkcióját, a címtárak nem virtuálisak. Ehelyett konkrét, független objektumok. 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ár tartalmának listázása (Azure Data Lake Storage Gen2) 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

Feljegyzés

A blob-pillanatképek nem szerepelhetnek hierarchikus listaelem-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.

A blobok aszinkron API-k használatával történő listázásához kövesse az alábbi lépéseket:

  1. 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, BlobPrefix
    
  2. Kód hozzáadása a program futtatásához a következő használatával asyncio.run: . Ez a függvény a példánkban futtatja az átadott koroutint, main() és kezeli az asyncio eseményhurokot. A koroutinok az aszinkron/várakozási szintaxissal vannak deklarálva. Ebben a példában a main() coroutine először a legfelső szintet BlobServiceClientasync withhozza létre, majd meghívja a blobokat listázó metódust. Vegye figyelembe, hogy csak a legfelső szintű ügyfélnek kell használnia async 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())
    
  3. Adjon hozzá kódot a blobok listázásához. Az alábbi példakód egy egyszerű listaelem használatával sorolja fel a blobokat. A kód megegyezik a szinkron példával, azzal a kivétellel, hogy a metódus a kulcsszóval async van deklarálva, és async for a list_blobs metódus meghívásakor használatos.

    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 alapszintű beállítással a cikkben más példákat is implementálhat coroutinesként az aszinkron/várakozási szintaxis használatával.

Források

Ha többet szeretne megtudni arról, hogyan listázhatja a blobokat a Pythonhoz készült Azure Blob Storage ügyfélkódtár használatával, tekintse meg az alábbi erőforrásokat.

REST API-műveletek

Az Azure SDK for Python olyan kódtárakat tartalmaz, amelyek az Azure REST API-ra épülnek, lehetővé téve a REST API-műveletek használatát jól ismert Python-paradigmákon keresztül. A blobok felsorolására szolgáló ügyfélkódtár-metódusok a következő REST API-műveletet használják:

Kódminták

Ügyfélkódtár erőforrásai

Lásd még