如何使用Python列出Azure云存储中特定子目录内的所有blob?

2022-03-17 00:00:00 python azure azure-storage

问题描述

我练习了Azure文档中的示例代码https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-python

from azure.storage.blob import BlockBlobService
account_name = "x"
account_key = "x"
top_level_container_name = "top_container"

blob_service = BlockBlobService(account_name, account_key)

print("
List blobs in the container")
generator = blob_service.list_blobs(top_level_container_name)
for blob in generator:
    print("	 Blob name: " + blob.name)

现在我想知道如何在我的容器行走中获得更细粒度的效果。我的容器TOP_LEVEL_CONTAINER_NAME有几个子目录

  • TOP_LEVEL_CONTAINER_NAME/dir1
  • TOP_LEVEL_CONTAINER_NAME/dir2
  • 该模式中的
我希望能够仅列出其中一个目录中的所有blob。例如

  • dir1/a.jpg
  • dir1/b.jpg
  • ETC

如何才能获得仅包含dir1内容的生成器,而不必遍历所有其他dirs?(我还会带一个列表或字典)

我尝试将/dir1添加到top_level_tainer_name的名称中,因此它将是top_level_container_name = "top_container/dir1",但是不起作用。我返回错误代码azure.common.AzureHttpError: The requested URI does not represent any resource on the server. ErrorCode: InvalidUri

文档似乎甚至没有关于BlockBlobService.list_blobs()https://docs.microsoft.com/en-us/python/api/azure.storage.blob.blockblobservice.blockblobservice?view=azure-python

的任何信息

更新: list_blobs()来自https://github.com/Azure/azure-storage-python/blob/ff51954d1b9d11cd7ecd19143c1c0652ef1239cb/azure-storage-blob/azure/storage/blob/baseblobservice.py#L1202


解决方案

请尝试如下操作:

generator = blob_service.list_blobs(top_level_container_name, prefix="dir1/")

这应列出dir1虚拟目录中的Blob和文件夹。

如果要列出dir1虚拟目录中的所有Blob,请尝试如下操作:

generator = blob_service.list_blobs(top_level_container_name, prefix="dir1/", delimiter="")

有关详细信息,请参阅link

相关文章