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

如何用Python下载Blob容器所有文件或读取为DataFrame?

Azure Blob 下载与转为DataFrame实现方案

一、修正现有Blob列表代码

你的现有代码存在blob_name未定义就调用的小问题,先修正为可正常运行的版本:

from azure.storage.blob import ContainerClient
import io
import pandas as pd

sas_url = r'https://ubftp.blob.core.windows.netxxxxxxxxxxxxxxxx'
container = ContainerClient.from_container_url(sas_url, delimiter='/')
blob_list = container.list_blobs()

for blob in blob_list:
    blob_name = blob['name']
    print(f"当前处理Blob: {blob_name}")

二、添加Blob下载到本地的代码

在循环中加入下载逻辑,指定本地保存路径即可实现批量下载:

from azure.storage.blob import ContainerClient
import os
import pandas as pd

sas_url = r'https://ubftp.blob.core.windows.netxxxxxxxxxxxxxxxx'
container = ContainerClient.from_container_url(sas_url, delimiter='/')
blob_list = container.list_blobs()

# 本地保存根目录,可自行修改
local_root_path = "./downloaded_blobs/"
# 自动创建保存目录(如果不存在)
os.makedirs(local_root_path, exist_ok=True)

for blob in blob_list:
    blob_name = blob['name']
    print(f"正在下载: {blob_name}")
    # 拼接本地保存路径,保留原Blob的层级结构
    local_file_path = os.path.join(local_root_path, blob_name)
    # 自动创建Blob对应的子目录
    os.makedirs(os.path.dirname(local_file_path), exist_ok=True)
    # 下载Blob到本地文件
    container.download_blob(blob_name).read_to_path(local_file_path)
    print(f"下载完成: {local_file_path}")

三、读取Blob内容转为Pandas DataFrame

如果你的Blob是CSV格式,可直接将内容读取到内存并转为DataFrame;其他格式可替换对应读取方法:

from azure.storage.blob import ContainerClient
import io
import pandas as pd

sas_url = r'https://ubftp.blob.core.windows.netxxxxxxxxxxxxxxxx'
container = ContainerClient.from_container_url(sas_url, delimiter='/')
blob_list = container.list_blobs()

for blob in blob_list:
    blob_name = blob['name']
    # 仅处理CSV文件,可根据实际格式修改后缀判断
    if not blob_name.endswith('.csv'):
        print(f"跳过非CSV文件: {blob_name}")
        continue
    
    print(f"正在读取并转换: {blob_name}")
    # 将Blob内容读取到内存字节流
    blob_bytes = container.download_blob(blob_name).readall()
    # 转为字符串流后读取为DataFrame
    df = pd.read_csv(io.StringIO(blob_bytes.decode('utf-8')))
    
    # 这里可以添加对DataFrame的后续处理逻辑
    print(f"DataFrame基本信息:")
    df.info()
    # 示例:打印前5行数据
    print(df.head())

如果Blob是Parquet格式,可将pd.read_csv替换为pd.read_parquet,并使用io.BytesIO(blob_bytes)作为参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:20:23