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

如何使用Python高效列出Azure Blob中的所有文件?

优化Azure Blob大量文件列表查询的方法

针对你遇到的大量文件列表查询过慢的问题,可以通过以下几个核心优化点提升效率:

1. 使用list_blob_names()替代list_blobs()

原代码中list_blobs()会返回包含完整属性的BlobItem对象(如文件大小、修改时间等),但你只需要文件名,多余的数据会增加网络传输和本地序列化的开销。list_blob_names()专门只返回文件名字符串,能大幅减少数据传输量。

优化后的代码:

import os, uuid
from azure.storage.blob import BlobServiceClient, __version__

connect_str = "************"

blob_service_client = BlobServiceClient.from_connection_string(connect_str)
container_client = blob_service_client.get_container_client("blobName")

# 直接获取所有blob名称,无需手动循环append
blob_names = list(container_client.list_blob_names())

2. 增大分页返回数量

Azure Blob的列表接口默认每页返回1000条数据,你可以通过results_per_page参数设置为允许的最大值(5000),减少HTTP请求的总次数,进一步提升速度。

示例代码:

# 每页返回5000条,降低请求频次
blob_names = list(container_client.list_blob_names(results_per_page=5000))

3. 异步批量获取(百万级文件场景)

如果文件量达到百万级以上,可使用异步版本的SDK并行处理分页请求,利用IO等待时间处理其他请求,提升整体效率。

首先安装异步依赖:

pip install azure-storage-blob[aio]

异步代码示例:

import asyncio
from azure.storage.blob.aio import BlobServiceClient

connect_str = "************"

async def get_all_blob_names():
    blob_service_client = BlobServiceClient.from_connection_string(connect_str)
    async with blob_service_client:
        container_client = blob_service_client.get_container_client("blobName")
        blob_names = []
        # 异步遍历分页结果,每页5000条
        async for blob_name in container_client.list_blob_names(results_per_page=5000):
            blob_names.append(blob_name)
        return blob_names

# 执行异步函数
blob_names = asyncio.run(get_all_blob_names())

额外建议

  • 避免在遍历过程中执行写入文件、数据库等额外IO操作,先一次性获取所有文件名后再批量处理后续逻辑。
  • 若存储账户启用了分层命名空间(Data Lake Storage Gen2),可使用container_client.list_paths()方法,该方法针对目录结构做了优化,列表查询速度会更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:05:17