Mencantumkan blob dengan Python

Artikel ini memperlihatkan cara mencantumkan blob menggunakan pustaka klien Azure Storage untuk Python.

Untuk mempelajari tentang mencantumkan blob menggunakan API asinkron, lihat Mencantumkan blob secara asinkron.

Prasyarat

  • Artikel ini mengasumsikan Anda sudah menyiapkan proyek untuk bekerja dengan pustaka klien Azure Blob Storage untuk Python. Untuk mempelajari tentang menyiapkan proyek Anda, termasuk penginstalan paket, menambahkan import pernyataan, dan membuat objek klien resmi, lihat Mulai menggunakan Azure Blob Storage dan Python.
  • Untuk menggunakan API asinkron dalam kode Anda, lihat persyaratan di bagian Pemrograman asinkron.
  • Mekanisme otorisasi harus memiliki izin untuk mencantumkan blob. Untuk mempelajari lebih lanjut, lihat panduan otorisasi untuk operasi REST API berikut:

Tentang opsi daftar blob

Saat Anda mencantumkan blob dari kode, Anda dapat menentukan banyak opsi untuk mengelola bagaimana hasil dikembalikan dari Azure Storage. Anda dapat menentukan jumlah hasil yang akan dikembalikan di setiap set hasil, lalu mengambil set berikutnya. Anda dapat menentukan awalan untuk mengembalikan blob yang namanya dimulai dengan karakter atau string tersebut. Dan Anda dapat mencantumkan blob dalam struktur daftar datar, atau hierarkis. Daftar hierarki mengembalikan blob seolah-olah disusun ke dalam folder.

Untuk mencantumkan blob dalam kontainer menggunakan daftar datar, panggil salah satu metode berikut:

  • ContainerClient.list_blobs (bersama dengan nama, Anda dapat secara opsional menyertakan metadata, tag, dan informasi lain yang terkait dengan setiap blob)
  • ContainerClient.list_blob_names (hanya mengembalikan nama blob)

Untuk mencantumkan blob dalam kontainer menggunakan daftar hierarkis, panggil metode berikut:

  • ContainerClient.walk_blobs (bersama dengan nama, Anda dapat secara opsional menyertakan metadata, tag, dan informasi lain yang terkait dengan setiap blob)

Memfilter hasil dengan prefiks

Untuk memfilter daftar blob, tentukan string untuk name_starts_with argumen kata kunci. String awalan dapat menyertakan satu atau lebih karakter. Azure Storage kemudian mengembalikan kontainer yang namanya dimulai dengan awalan tersebut saja.

Daftar datar versus daftar hierarkis

Blob di Azure Storage diatur dalam paradigma datar, bukan paradigma hierarkis (seperti sistem file klasik). Namun, Anda dapat mengatur blob ke direktori virtual untuk meniru struktur folder. Direktori virtual merupakan bagian dari nama blob dan ditunjukkan oleh karakter pemisah.

Untuk mengatur blob ke dalam direktori virtual, gunakan karakter pemisah dalam nama blob. Karakter pemisah default adalah garis miring (/), tetapi Anda dapat menentukan karakter apa pun sebagai pemisah.

Jika Anda memberi nama blob Anda menggunakan pemisah, maka Anda dapat memilih untuk mencantumkan blob secara hierarkis. Untuk operasi daftar hierarkis, Azure Storage mengembalikan direktori dan blob virtual di bawah objek induk. Anda dapat memanggil operasi daftar secara rekursif untuk melintasi hierarki, mirip dengan cara Anda melintasi sistem file klasik secara terprogram.

Menggunakan daftar datar

Secara default, operasi daftar mengembalikan blob dalam daftar datar. Dalam daftar datar, blob tidak diatur oleh direktori virtual.

Contoh berikut mencantumkan blob dalam kontainer yang ditentukan menggunakan daftar datar:

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}")

Output sampel mirip dengan:

List blobs flat:
Name: file4.txt
Name: folderA/file1.txt
Name: folderA/file2.txt
Name: folderA/folderB/file3.txt

Anda juga dapat menentukan opsi untuk memfilter hasil daftar atau menampilkan informasi tambahan. Contoh berikut mencantumkan tag blob dan 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']}")

Output sampel mirip dengan:

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'}

Catatan

Contoh output yang ditampilkan mengasumsikan bahwa Anda memiliki akun penyimpanan dengan namespace datar. Jika Anda telah mengaktifkan fitur namespace hierarkis untuk akun penyimpanan Anda, direktori tidak virtual. Sebaliknya, mereka adalah objek konkret dan independen. Akibatnya, direktori muncul dalam daftar sebagai blob panjang nol.

Untuk opsi daftar alternatif saat bekerja dengan namespace hierarkis, lihat Mencantumkan konten direktori (Azure Data Lake Storage Gen2).

Menggunakan daftar hierarkis

Saat Anda memanggil operasi daftar secara hierarkis, Azure Storage mengembalikan direktori dan blob virtual di tingkat hierarki pertama.

Untuk mencantumkan blob secara hierarkis, gunakan metode berikut:

Contoh berikut mencantumkan blob dalam kontainer yang ditentukan menggunakan daftar hierarkis:

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}")

Output sampel mirip dengan:

folderA/
  folderA/folderB/
    folderA/folderB/file3.txt
  folderA/file1.txt
  folderA/file2.txt
file4.txt

Catatan

Rekam jepret blob tidak dapat dicantumkan dalam operasi daftar hierarkis.

Mencantumkan blob secara asinkron

Pustaka klien Azure Blob Storage untuk Python mendukung daftar blob secara asinkron. Untuk mempelajari selengkapnya tentang persyaratan penyiapan proyek, lihat Pemrograman asinkron.

Ikuti langkah-langkah ini untuk mencantumkan blob menggunakan API asinkron:

  1. Tambahkan pernyataan import berikut:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, ContainerClient, BlobPrefix
    
  2. Tambahkan kode untuk menjalankan program menggunakan asyncio.run. Fungsi ini menjalankan coroutine yang diteruskan, main() dalam contoh kami, dan mengelola perulangan asyncio peristiwa. Koroutin dinyatakan dengan sintaks asinkron/tunggu. Dalam contoh ini, main() coroutine pertama-tama membuat tingkat BlobServiceClient atas menggunakan async with, lalu memanggil metode yang mencantumkan blob. Perhatikan bahwa hanya klien tingkat atas yang perlu menggunakan async with, karena klien lain yang dibuat darinya berbagi kumpulan koneksi yang sama.

    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. Tambahkan kode untuk mencantumkan blob. Contoh kode berikut mencantumkan blob menggunakan daftar datar. Kode sama dengan contoh sinkron, kecuali bahwa metode dideklarasikan dengan async kata kunci dan async for digunakan saat memanggil list_blobs metode .

    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}")
    

Dengan pengaturan dasar ini, Anda dapat menerapkan contoh lain dalam artikel ini sebagai koroutin menggunakan sintaks asinkron/tunggu.

Sumber daya

Untuk mempelajari selengkapnya tentang cara mencantumkan blob menggunakan pustaka klien Azure Blob Storage untuk Python, lihat sumber daya berikut ini.

Operasi REST API

Azure SDK untuk Python berisi pustaka yang dibangun di atas Azure REST API, memungkinkan Anda berinteraksi dengan operasi REST API melalui paradigma Python yang sudah dikenal. Metode pustaka klien untuk mencantumkan blob menggunakan operasi REST API berikut:

Sampel kode

Sumber daya pustaka klien

Baca juga