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

从Azure Blob Storage下载资源返回空结果的问题咨询

核心原因

你传入的BLOBNAME是虚拟目录路径而非单个Blob文件的完整名称。Azure Blob Storage本质是扁平存储结构,你看到的三级文件夹层级是Blob名称中携带/字符虚拟生成的,不存在实体文件夹对象。get_blob_client()方法只能指向单个具体的Blob文件,当传入虚拟目录路径时,你获取的是路径对应的空占位对象,自然下载不到实际的JSON数据。
如果之前你在Blob存储中手动创建过实体目录占位对象(也就是名称为location1/2021-07-09/07-00/的0大小Blob),就是你调用get_blob_client没有报错但下载结果为空的直接原因。

修正方案

你需要先遍历指定前缀下的所有实际Blob文件,再逐个下载,修正后代码示例如下:

import json
import pandas as pd
import keyring
import os
import time
from azure.storage.blob import BlobServiceClient # 原代码缺少该导入

STORAGEACCOUNTURL= "https://<mystorageaccount>.blob.core.windows.net"
STORAGEACCOUNTKEY= keyring.get_password('<name>', '<username>')
# 存储下载文件的本地文件夹,自动创建不存在的目录
LOCAL_SAVE_DIR = os.path.join(os.getcwd(), 'test_blob')
os.makedirs(LOCAL_SAVE_DIR, exist_ok=True)
CONTAINERNAME= "edge"
# 目标虚拟目录前缀
BLOB_PREFIX = 'location1/2021-07-09/07-00/'

t1=time.time()
blob_service_client_instance = BlobServiceClient(
    account_url=STORAGEACCOUNTURL, 
    credential=STORAGEACCOUNTKEY
)
# 获取容器客户端
container_client = blob_service_client_instance.get_container_client(CONTAINERNAME)

# 遍历前缀下所有Blob文件
for blob in container_client.list_blobs(name_starts_with=BLOB_PREFIX):
    # 跳过虚拟目录占位对象(大小为0、名称以/结尾的对象)
    if blob.name.endswith('/') and blob.size == 0:
        continue
    # 生成本地存储路径
    local_file_path = os.path.join(LOCAL_SAVE_DIR, os.path.basename(blob.name))
    # 下载单个Blob
    blob_client = container_client.get_blob_client(blob)
    with open(local_file_path, "wb") as f:
        blob_data = blob_client.download_blob()
        blob_data.readinto(f)
    print(f"已下载文件:{blob.name}")

t2=time.time()
print(f"全部下载完成,共耗时{t2 - t1}秒")

如果需要合并所有JSON文件为单个文件,可以在遍历过程中读取每个Blob的内容,合并后再统一写入本地即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 17:51:04