AlphaFeed Blog

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

工程化 · 代码验证于 2026-09-12

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

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

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

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

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

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

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

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返回 DataFrameTrue

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

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(中文不乱码)

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 列),直接纵向拼起来:

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")

关键坑与注意事项

常见问题(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 或下游工具。

相关链接:


免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。