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

如何在Azure Functions中读取Azure存储容器内的多个CSV文件

解答

核心问题答复

  • 原生的Azure Functions Blob输入绑定不支持直接指定文件夹路径来动态读取该路径下全部文件:Blob输入绑定要求路径参数要么为静态值,要么来自触发请求的动态参数,无法主动枚举指定路径下所有未知名称的Blob,你目前看到的单个文件绑定示例是该绑定的标准用法。

推荐实现方案

直接在Python函数代码中集成Azure Storage Blob SDK,自行完成文件夹下Blob的枚举、筛选和读取,步骤如下:

  1. 首先在项目的requirements.txt中添加依赖:
azure-storage-blob
azure-functions
  1. 简化function.json配置,移除原有的单个Blob输入绑定,仅保留HTTP触发和输出即可:
{
  "bindings": [ 
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [ 
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ],
  "scriptFile": "__init__.py"
}
  1. 编写__init__.py代码逻辑,示例如下:
import azure.functions as func
import csv
from io import StringIO
from azure.storage.blob import BlobServiceClient
import os

def main(req: func.HttpRequest) -> func.HttpResponse:
    # 从应用配置中读取存储账户连接字符串
    storage_conn_str = os.environ["MyStorageConnectionAppSetting"]
    blob_service_client = BlobServiceClient.from_connection_string(storage_conn_str)
    
    # 指定要读取的容器和文件夹前缀
    container_name = "samplesCSVs"
    folder_prefix = "" # 如果是容器下的二级文件夹,这里填路径比如"upload/csvs/"
    container_client = blob_service_client.get_container_client(container_name)
    
    # 枚举文件夹下所有CSV文件
    csv_blobs = container_client.list_blobs(name_starts_with=folder_prefix)
    process_result = []
    
    for blob in csv_blobs:
        # 过滤非CSV文件
        if not blob.name.endswith(".csv"):
            continue
        # 读取Blob内容
        blob_client = container_client.get_blob_client(blob)
        csv_content = blob_client.download_blob().readall().decode("utf-8")
        # 校验CSV逻辑
        csv_reader = csv.reader(StringIO(csv_content))
        row_count = sum(1 for row in csv_reader)
        process_result.append(f"文件{blob.name}校验完成,共{row_count}行")
    
    return func.HttpResponse("\n".join(process_result), status_code=200)

方案优势

  • 完全支持动态文件变化,不需要提前获知文件数量和名称
  • 比打包ZIP的方案效率高,不需要额外的打包解压步骤
  • 可以灵活添加筛选逻辑,比如按文件修改时间、文件大小过滤目标处理文件

注意事项

  • 如果CSV文件体积较大,可采用流式读取方式,避免一次性加载全量内容占用过多内存
  • 存储账户连接字符串需要提前配置到Azure Functions的应用设置中,本地调试时配置到local.settings.json的Values字段下

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:24:03