如何用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
相关产品推荐
相关产品推荐

