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)
配套配置要求
- 打开Azure Function门户的「配置」-「应用程序设置」,新增配置项:
- 键:
BLOB_CONNECTION_STRING - 值:你的存储账户完整连接字符串
- 键:
- 你的Function项目根目录下的
requirements.txt需添加以下依赖声明:
azure-functions yfinance pandas azure-storage-blob
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

