Python ile blobları listeleme
Bu makalede, Python için Azure Depolama istemci kitaplığını kullanarak blobların nasıl liste adımlarını gösterebilirsiniz.
Zaman uyumsuz API'leri kullanarak blobları listeleme hakkında bilgi edinmek için bkz . Blobları zaman uyumsuz olarak listeleme.
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik oluşturun
- Azure depolama hesabı - depolama hesabı oluşturma
- Python 3.8+
Ortamınızı ayarlama
Mevcut bir projeniz yoksa, bu bölümde Python için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere bir projenin nasıl ayarlanacağı gösterilir. Diğer ayrıntılar için bkz. Azure Blob Depolama ve Python'ı kullanmaya başlama.
Bu makaledeki kod örnekleriyle çalışmak için projenizi ayarlamak için bu adımları izleyin.
Paketleri yükleme
kullanarak pip install
aşağıdaki paketleri yükleyin:
pip install azure-storage-blob azure-identity
İçeri aktarma deyimleri ekleme
Aşağıdaki import
deyimlerini ekleyin:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, ContainerClient, BlobPrefix
Yetkilendirme
Yetkilendirme mekanizması, bir blobu listelemek için gerekli izinlere sahip olmalıdır. Microsoft Entra Id ile yetkilendirme için (önerilen), Azure RBAC yerleşik rolü Depolama Blob Veri Okuyucusu veya üzeri gerekir. Daha fazla bilgi edinmek için Bkz. Liste Blobları (REST API) için yetkilendirme kılavuzu.
İstemci nesnesi oluşturma
Bir uygulamayı Blob Depolama'ya bağlamak için bir BlobServiceClient örneği oluşturun. Aşağıdaki örnekte yetkilendirme için kullanarak DefaultAzureCredential
bir istemci nesnesinin nasıl oluşturulacağı gösterilmektedir:
# 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)
Ayrıca, doğrudan veya nesneden BlobServiceClient
belirli kapsayıcılar veya bloblar için istemci nesneleri oluşturabilirsiniz. İstemci nesneleri oluşturma ve yönetme hakkında daha fazla bilgi edinmek için bkz . Veri kaynaklarıyla etkileşim kuran istemci nesneleri oluşturma ve yönetme.
Blob listeleme seçenekleri hakkında
Kodunuzdan blobları listelediğinizde, Sonuçların Azure Depolama'dan nasıl döndürüleceğini yönetmek için birçok seçenek belirtebilirsiniz. Her sonuç kümesinde döndürülecek sonuç sayısını belirtebilir ve ardından sonraki kümeleri alabilirsiniz. Adları bu karakter veya dizeyle başlayan blobları döndürmek için bir ön ek belirtebilirsiniz. Ayrıca blobları düz listeleme yapısında veya hiyerarşik olarak listeleyebilirsiniz. Hiyerarşik liste, blobları klasörler halinde düzenlenmiş gibi döndürür.
Düz liste kullanarak bir kapsayıcıdaki blobları listelemek için şu yöntemlerden birini çağırın:
- ContainerClient.list_blobs (adla birlikte isteğe bağlı olarak meta verileri, etiketleri ve her blobla ilişkili diğer bilgileri ekleyebilirsiniz)
- ContainerClient.list_blob_names (yalnızca blob adını döndürür)
Hiyerarşik liste kullanarak kapsayıcıdaki blobları listelemek için aşağıdaki yöntemi çağırın:
- ContainerClient.walk_blobs (adın yanı sıra, isteğe bağlı olarak her blobla ilişkili meta verileri, etiketleri ve diğer bilgileri de ekleyebilirsiniz)
Sonuçları ön ek ile filtreleme
Blob listesini filtrelemek için anahtar sözcük bağımsız değişkeni için name_starts_with
bir dize belirtin. Ön ek dizesi bir veya daha fazla karakter içerebilir. Azure Depolama daha sonra yalnızca adları bu ön ek ile başlayan blobları döndürür.
Düz listeleme ve hiyerarşik listeleme karşılaştırması
Azure Depolama'daki bloblar hiyerarşik paradigma (klasik dosya sistemi gibi) yerine düz bir paradigma içinde düzenlenir. Ancak, bir klasör yapısını taklit etmek için blobları sanal dizinler halinde düzenleyebilirsiniz. Sanal dizin, blob adının bir bölümünü oluşturur ve sınırlayıcı karakteriyle gösterilir.
Blobları sanal dizinler halinde düzenlemek için blob adında bir sınırlayıcı karakteri kullanın. Varsayılan sınırlayıcı karakteri eğik çizgidir (/) ancak sınırlayıcı olarak herhangi bir karakteri belirtebilirsiniz.
Bloblarınızı sınırlayıcı kullanarak adlandırıyorsanız, blobları hiyerarşik olarak listelemeyi seçebilirsiniz. Hiyerarşik listeleme işlemi için Azure Depolama, üst nesnenin altındaki tüm sanal dizinleri ve blobları döndürür. Hiyerarşide geçiş yapmak için listeleme işlemini yinelemeli olarak çağırabilirsiniz. Örneğin, klasik dosya sisteminde program aracılığıyla geçiş yapabilirsiniz.
Düz liste kullanma
Varsayılan olarak, listeleme işlemi düz bir listede bloblar döndürür. Düz bir listede bloblar sanal dizine göre düzenlenemez.
Aşağıdaki örnekte belirtilen kapsayıcıdaki bloblar düz liste kullanılarak listelenmektedir:
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}")
Örnek çıktı şuna benzer:
List blobs flat:
Name: file4.txt
Name: folderA/file1.txt
Name: folderA/file2.txt
Name: folderA/folderB/file3.txt
Ayrıca, liste sonuçlarını filtreleme veya ek bilgileri gösterme seçeneklerini belirtebilirsiniz. Aşağıdaki örnek blobları ve blob etiketlerini listeler:
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']}")
Örnek çıktı şuna benzer:
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'}
Not
Gösterilen örnek çıktı, düz ad alanına sahip bir depolama hesabınız olduğunu varsayar. Depolama hesabınız için hiyerarşik ad alanı özelliğini etkinleştirdiyseniz, dizinler sanal değildir. Bunun yerine, bunlar somut, bağımsız nesnelerdir. Sonuç olarak, dizinler listede sıfır uzunlukta bloblar olarak görünür.
Hiyerarşik ad alanıyla çalışırken alternatif listeleme seçeneği için bkz . Dizin içeriğini listeleme (Azure Data Lake Storage).
Hiyerarşik liste kullanma
Listeleme işlemini hiyerarşik olarak çağırdığınızda, Azure Depolama hiyerarşinin ilk düzeyindeki sanal dizinleri ve blobları döndürür.
Blobları hiyerarşik olarak listelemek için aşağıdaki yöntemi kullanın:
Aşağıdaki örnek, hiyerarşik bir liste kullanarak belirtilen kapsayıcıdaki blobları listeler:
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}")
Örnek çıktı şuna benzer:
folderA/
folderA/folderB/
folderA/folderB/file3.txt
folderA/file1.txt
folderA/file2.txt
file4.txt
Not
Blob anlık görüntüleri hiyerarşik listeleme işleminde listelenemez.
Blobları zaman uyumsuz olarak listeleme
Python için Azure Blob Depolama istemci kitaplığı, blobları zaman uyumsuz olarak listelemeyi destekler. Proje kurulum gereksinimleri hakkında daha fazla bilgi edinmek için bkz . Zaman uyumsuz programlama.
Zaman uyumsuz API'leri kullanarak blobları listelemek için şu adımları izleyin:
Aşağıdaki içeri aktarma deyimlerini ekleyin:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, ContainerClient, BlobPrefix
kullanarak
asyncio.run
programı çalıştırmak için kod ekleyin. Bu işlev,main()
örneğimizde geçirilen eş yordamları çalıştırır ve olay döngüsünü yönetirasyncio
. Eş yordamlar zaman uyumsuz/await söz dizimi ile bildirilir. Bu örnekte,main()
eş yordam önce kullanarakasync with
en üst düzeyiBlobServiceClient
oluşturur, ardından blobları listeleyen yöntemi çağırır. Yalnızca en üst düzey istemcinin kullanmasıasync with
gerektiğini unutmayın; bu istemciden oluşturulan diğer istemciler aynı bağlantı havuzunu paylaşır.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())
Blobları listelemek için kod ekleyin. Aşağıdaki kod örneği, düz liste kullanarak blobları listeler. Kod, zaman uyumlu örnekle aynıdır, ancak yöntemi anahtar sözcüğüyle
async
bildirilir veasync for
yöntemi çağrılırkenlist_blobs
kullanılır.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}")
Bu temel kurulumla, bu makaledeki diğer örnekleri zaman uyumsuz/await söz dizimini kullanarak eş yordam olarak uygulayabilirsiniz.
Kaynaklar
Python için Azure Blob Depolama istemci kitaplığını kullanarak blobları listeleme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.
Kod örnekleri
- Bu makaledeki (GitHub) zaman uyumlu veya zaman uyumsuz kod örneklerini görüntüleyin
REST API işlemleri
Python için Azure SDK, Azure REST API'sinin üzerinde derlenmiş kitaplıklar içerir ve tanıdık Python paradigmalarıyla REST API işlemleriyle etkileşim kurmanızı sağlar. Blobları listelemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemini kullanır:
- Blobları Listeleme (REST API)
İstemci kitaplığı kaynakları
Ayrıca bkz.
İlgili içerik
- Bu makale, Python için Blob Depolama geliştirici kılavuzunun bir parçasıdır. Daha fazla bilgi edinmek için Python uygulamanızı oluşturma makalesinde geliştirici kılavuzu makalelerinin tam listesine bakın.