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

Python 3.x下Azure Function输出CSV保存至Azure容器的实现问题

疑问解答

  • 上传CSV到容器前不需要保存到临时文件夹,可以直接转成字节流推送,性能更高也不用处理临时文件权限问题。如果确实有本地落盘需求,Azure Function仅开放临时目录的写入权限:Linux消费计划对应/tmp目录,Windows消费计划对应%TEMP%目录,其他路径无写入权限。
  • 不需要在函数中配置本地文件夹到Blob容器的映射,Blob的存储路径直接通过blob_name参数定义即可,例如要将文件存到容器的share_price/2024-xx-xx.csv路径,直接将blob_name设为对应字符串即可,Blob的虚拟目录由blob_name中的/自动识别。

整合后完整代码(以定时触发Azure Function为例)

import azure.functions as func
import yfinance as yf
import pandas as pd
from datetime import date
from azure.storage.blob import BlobClient
import io
import os

def main(mytimer: func.TimerRequest) -> None:
    # 生成股票数据DataFrame
    NZX =[["Ascension Capital Limited", "ACE"],["AFC Group Holdings Limited", "AFC"],["Z Energy Limited", "ZEL"]]
    today = str(date.today().isoformat())
    df_list = []
    for stock_info in NZX:
        code = stock_info[1]
        ticker = f"{code}.NZ"
        data = yf.download(ticker, group_by="Ticker", period='1d')
        data['ticker'] = ticker
        df_list.append(data)       
    df = pd.concat(df_list)

    # 直接将DataFrame转为字节流,无需写入本地磁盘
    output_stream = io.BytesIO()
    df.to_csv(output_stream, encoding='utf-8')
    output_stream.seek(0)

    # 从环境变量读取存储连接字符串(禁止硬编码敏感信息)
    blob_conn_str = os.environ["BLOB_CONNECTION_STRING"]
    # 定义Blob在容器中的存储路径
    blob_name = f"share_prices/{today}_nzx.csv"
    blob = BlobClient.from_connection_string(
        conn_str=blob_conn_str,
        container_name="container1",
        blob_name=blob_name
    )
    # 上传文件,overwrite=True表示同路径文件直接覆盖
    blob.upload_blob(output_stream, overwrite=True)

配套配置要求

  1. 打开Azure Function门户的「配置」-「应用程序设置」,新增配置项:
    • 键:BLOB_CONNECTION_STRING
    • 值:你的存储账户完整连接字符串
  2. 你的Function项目根目录下的requirements.txt需添加以下依赖声明:
azure-functions
yfinance
pandas
azure-storage-blob

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:24:04