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

如何使用BlobServiceClient从Azure Blob Storage获取BytesIO流而非下载

替代旧版Azure Blob存储代码以获取Pandas可读取的数据流

需求是无需下载文件,通过新版azure-storage-blob的BlobServiceClient获取能被Pandas直接读取的数据流,替代旧版基于BlockBlobService的实现。

完整替代代码

from io import BytesIO, TextIOWrapper
from azure.storage.blob import BlobServiceClient

# 你已正确配置BlobServiceClient,直接复用即可
BSC = BlobServiceClient() 

def get_pandas_readable_stream(container, filename):
    stream = BytesIO()
    # 获取Blob客户端并将内容读取到内存流
    blob_client = BSC.get_blob_client(container=container, blob=filename)
    blob_client.download_blob().readinto(stream)
    # 重置流指针到起始位置
    stream.seek(0)
    # 包装为带UTF-8编码的文本流,适配Pandas读取
    wrapper = TextIOWrapper(stream, encoding="utf-8")
    return wrapper

关键细节说明

  • 新版SDK弃用了BlockBlobService,改用BlobServiceClient作为核心入口,你已完成初始化配置,直接使用即可。
  • download_blob().readinto(stream)实现了将Blob内容直接写入内存的BytesIO流,全程无需下载到本地文件,满足你的需求。
  • 必须调用stream.seek(0):流写入完成后指针会停在末尾位置,不重置的话后续Pandas读取会获取空内容,这步逻辑和旧版保持一致。
  • 用TextIOWrapper包装字节流为带编码的文本流,确保Pandas的各类读取方法(如pd.read_csv())能正常解析内容。

和旧版代码的对应变化

  • 移除旧版BlockBlobService的初始化代码,替换为已配置好的BlobServiceClient。
  • 旧版的get_blob_to_stream方法,对应新版的download_blob().readinto(stream)调用。
  • 流指针重置、文本包装的逻辑完全保留,确保替换后原有依赖该返回值的Pandas代码无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:00:28