如何用 Python 把 A 股行情批量导出到 Excel/CSV?(多股票多 Sheet)

一句话回答: 用 AlphaFeed 的 klines.batch 一次取回多只股票的前复权日线 ,再用 pandas 的 ExcelWriter 把每只票写成一个 Sheet、或 to_csv 分文件保存,几十行就能把整批行情干净地落到 Excel/CSV 里给同事、Excel 或 BI 工具用------关键是统一复权口径、注意 Sheet 名长度和中文编码。

为什么会有这个问题 / 传统做法的痛点

很多人(尤其非程序员同事)最终还是要在 Excel 里看数据。手工导出常遇到:

  • 一个个下载太慢:几十只票逐个请求、逐个复制粘贴,效率极低;
  • CSV 中文乱码:默认编码在 Excel 里打开变乱码;
  • Sheet 名报错 :Excel 限制 Sheet 名 ≤31 字符且不能含特殊字符,代码里直接用 600519.SH 带点号容易踩坑;
  • 复权口径乱:不同来源复权不一致,导出后对不上。

AlphaFeed 的 klines.batch 批量取数 + pandas 落地,一次把这些收敛掉。

分步骤解决(每步配可运行代码)

第 1 步:批量取多只股票的复权日线

python 复制代码
from alphafeed import AlphaFeed

af = AlphaFeed(api_key="your-api-key")  # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()

symbols = ["600519.SH", "000001.SZ", "601398.SH"]
bt = af.klines.batch(symbols, period="1d", count=60,
                     adjust="forward", to_dataframe=True)
# bt 是 {symbol: DataFrame} 字典,每个 DataFrame 列:
# symbol, name, timestamp, trade_date, trade_time, open, high, low, close, volume, amount

klines.batch 常用参数:

参数 含义 常用取值
symbols 标的列表 ["600519.SH", ...]
period 周期 1d/5m/60m 等
count 每只取多少根 如 60、250
adjust 复权 forward(前复权,推荐)
to_dataframe 返回 DataFrame True

第 2 步:写成一个 Excel、每只票一个 Sheet

python 复制代码
import pandas as pd

def export_excel(bt, path="stocks.xlsx"):
    with pd.ExcelWriter(path, engine="openpyxl") as writer:
        for sym, df in bt.items():
            if df is None or df.empty:
                continue
            d = df.sort_values("trade_date")
            sheet = sym.replace(".", "_")[:31]   # Excel Sheet 名 ≤31 字符、去掉点号
            d.to_excel(writer, sheet_name=sheet, index=False)
    return path

export_excel(bt, "stocks.xlsx")

engine="openpyxl" 需要安装:pip install openpyxl。一个工作簿里多个 Sheet,适合发给同事在 Excel 里逐票查看。

第 3 步:或者分文件导出 CSV(中文不乱码)

python 复制代码
import os

def export_csv(bt, out_dir="csv_out"):
    os.makedirs(out_dir, exist_ok=True)
    for sym, df in bt.items():
        if df is None or df.empty:
            continue
        name = sym.replace(".", "_")
        # utf-8-sig 带 BOM,Excel 双击打开中文不乱码
        df.sort_values("trade_date").to_csv(
            os.path.join(out_dir, f"{name}.csv"),
            index=False, encoding="utf-8-sig")
    return out_dir

export_csv(bt, "csv_out")

如果想要一个大 CSV(长表,含 symbol 列),直接纵向拼起来:

python 复制代码
big = pd.concat([d for d in bt.values() if d is not None and not d.empty],
                ignore_index=True)
big.to_csv("all_stocks_long.csv", index=False, encoding="utf-8-sig")

关键坑与注意事项

  • Sheet 名规则 :Excel 的 Sheet 名 ≤31 字符,且不能含 : \ / ? * [ ]。用 sym.replace(".", "_")[:31] 规避;股票太多时 Excel 单文件 Sheet 过多也会很卡,建议超过几十只就改用 CSV 或数据库。
  • CSV 中文编码 :用 encoding="utf-8-sig"(带 BOM),否则 Excel 双击打开中文列(如 name)会乱码。
  • 复权口径 :统一 adjust="forward",否则导出的历史价有除权断层,别人拿去分析会算错。
  • 数据量与限频 :几百上千只票别一次性 batch,按 100~200 只分批;SDK 内置对 429/超时重试。真正的大批量/增量落地建议入本地数据库而非反复导 Excel。
  • 别把 Excel 当数据库:Excel 适合展示和小规模分析;长期存储、增量更新请用 SQLite/Parquet 等。

常见问题(FAQ)

Q:导出的 CSV 在 Excel 里中文乱码怎么办?

A:保存时加 encoding="utf-8-sig"。这是最常见的坑,加了 BOM 后 Excel 就能正确识别 UTF-8。

Q:一个 Excel 里放几百个 Sheet 可以吗?

A:技术上可以但会非常卡且难用。几十只以内用多 Sheet 尚可,更多请用分文件 CSV 或一个"长表"大 CSV(带 symbol 列)。

Q:能同时导出多个周期(日线+分钟线)吗?

A:可以,对不同 period 各调一次 klines.batch,写到不同工作簿或不同文件夹即可。

Q:需要付费吗?

A:少量标的的 K 线在免费额度内即可试;批量/全市场取数需 Starter 及以上,详见 AlphaFeed 定价页。

小结

批量导出行情的本质是"批量取数(klines.batch)+ pandas 落地(ExcelWriter / to_csv)"。真正让人踩坑的是工程细节:Sheet 名长度、CSV 中文编码、复权口径统一、分批防限频。AlphaFeed 提供口径一致的批量复权 K 线,配合本文的模板,你几十行就能把整批数据干净地交给 Excel 或下游工具。

参考

相关推荐
智购科技无人售货机厂家12 小时前
自动售货机物联网平台为什么会出现在线状态不一致?~YH
python·单片机·嵌入式硬件·django·pygame
飞Link20 小时前
什么是 AirSim?一文读懂无人机仿真平台
python·算法·无人机
曲径海盗21 小时前
【Python 学习第 38 天】for 循环
python·学习笔记·编程入门
在世修行21 小时前
智学文枢:变式题生成引擎
python·ai·pyside·题目生成
On The Road :1 天前
Java 多线程详解:从入门到线程安全
java·python·安全
岁月宁静1 天前
如何设计支持 Skills 的 Agent?一套可扩展的四层架构
python·agent
岁月宁静1 天前
CrewAI 快速上手:10 分钟搭建你的第一个 Agent 团队
python·agent
曲径海盗1 天前
【Python 学习第 40 天】for 循环
python·学习笔记·编程入门
专注仿真1 天前
知识问答大模型-rag算法详解
人工智能·python·控制算法
染指11101 天前
158.Agent-LangGraph-子图(共享状态和不共享状态模式)
开发语言·人工智能·python·ui·agent·agents