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

如何从Azure存储批量读取通配符匹配JSON文件至Python DataFrame

Azure Blob 通配符读取多文件合并DataFrame实现方案

Azure Blob Storage 官方Python SDK原生不支持直接传入*类shell通配符读取文件,你可以通过「前缀拉取候选Blob + 通配规则过滤」的方式实现完全等价的递归匹配读取效果,具体实现如下:

实现逻辑

  • 先从通配路径中提取固定路径前缀,调用SDK的list_blobs方法只拉取该前缀下的所有Blob,避免全容器遍历带来的性能损耗
  • 借助Python标准库fnmatch实现文件名的通配符规则匹配,筛选出符合命名规则的文件,自动递归覆盖前缀路径下所有子目录的匹配文件
  • 逐个读取筛选后的JSON文件转为DataFrame,最终合并为单个DataFrame即可

完整代码

from azure.storage.blob import BlobServiceClient
import json
import pandas as pd
import fnmatch
import os

# 基础配置
container_name = "test"
constr = ""
# 你需要的通配符路径规则
wildcard_path = "raw/filename*.json"

# 拆分路径前缀和文件名匹配规则,缩小遍历范围
path_prefix = os.path.dirname(wildcard_path) + "/"
file_match_rule = os.path.basename(wildcard_path)

# 初始化Blob客户端
blob_service_client = BlobServiceClient.from_connection_string(constr)
container_client = blob_service_client.get_container_client(container_name)

df_collector = []

# 遍历指定前缀下的所有Blob(自动递归子目录)
for blob in container_client.list_blobs(name_starts_with=path_prefix):
    # 跳过目录占位Blob,匹配文件名规则
    if not blob.name.endswith("/") and fnmatch.fnmatch(os.path.basename(blob.name), file_match_rule):
        blob_client = container_client.get_blob_client(blob)
        download_stream = blob_client.download_blob()
        json_data = json.loads(download_stream.readall())
        df_collector.append(pd.DataFrame(json_data))

# 合并所有文件的DataFrame
merged_df = pd.concat(df_collector, ignore_index=True)

# 原有筛选逻辑
rslt_df = merged_df[merged_df['ID'] == 'f2a8141f-f1c1-42c3-bb57-910052b78110']
rslt_df.head()

优化提示

  • 如果你的JSON文件是JSON Lines格式(每行一个独立JSON对象),可以直接用pd.read_json(download_stream, lines=True)读取,比手动load后转DataFrame性能更高
  • 文件量较大时建议增加异常捕获逻辑,避免单个文件格式错误导致整个读取流程中断
  • 原代码中存在重复导入、冗余导入的问题(重复导入json、导入了未使用的uuid/datetime等模块),上述代码已经做了精简

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:45:33