You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python列出Azure存储容器中不属于子文件夹的Blob文件

解决Azure存储容器根目录Blob列表获取问题

错误原因

你使用的是Azure Storage Blob SDK v12+版本,该版本的list_blobs方法已移除delimiter参数,且无需重复传入container_name(容器客户端已绑定目标容器),这是触发TypeError的直接原因。

修正方案

使用SDK v12+的标准写法,通过include_delimiter=True参数区分虚拟目录与Blob,再筛选出根目录下的Blob(即不属于任何子文件夹的文件)。

修正后的代码

from azure.storage.blob import BlobServiceClient

def main(inputblob: func.InputStream, outputblob: func.Out[bytes]):
    connection_string = 'DefaultEndpointsProtocol=http;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;'
    container_name = "cloudops-resources"

    # 初始化客户端
    blob_service_client = BlobServiceClient.from_connection_string(connection_string)
    container_client = blob_service_client.get_container_client(container_name)
    
    # 列出带分隔符的容器内容(区分目录与Blob)
    blob_list = container_client.list_blobs(include_delimiter=True)
    
    root_blobs = []
    for entry in blob_list:
        # 筛选根目录Blob:排除虚拟目录(以/结尾)且名称不含子目录标识
        if not entry.name.endswith('/') and '/' not in entry.name:
            root_blobs.append(entry.name)
            print(entry.name)
    
    # 可基于root_blobs做后续处理

补充说明

  • include_delimiter=True会让SDK返回虚拟目录条目(名称以/结尾)和实际Blob
  • 若需严格区分Blob和虚拟目录,可使用isinstance(entry, BlobProperties)判断类型,避免名称特殊情况的误判

内容的提问来源于stack exchange,提问作者Asu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:42:50