ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何用 Python 批量处理通达信财务数据

如何用 Python 批量处理通达信财务数据

如何用 Python 批量处理通达信财务数据

【免费下载链接】mootdx通达信数据读取的一个简便使用封装项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx

mootdx 是一个通达信(TDX)数据的 Python 封装库,其中财务数据模块负责批量处理通达信财务数据:下载 gpcw 系列财务文件、把二进制 .dat 解析为 DataFrame,并支持按报告期批量回补。适合想搭建本地财务数据底表的量化开发和研究员阅读。

痛点对照:传统做法和 mootdx 做法

在动手之前,先看财务数据整理中三个常见痛点。与不做任何免费数据源对接的传统流程相比,做法上的差异大致如下:

传统做法mootdx 做法
在通达信客户端里逐季切换查看财务数据,或从数据源网站逐个导出 ExcelAffair.files()一次拉取全部报告期文件清单,Affair.parse()直接输出 pandas DataFrame
多年历史数据要逐个下载 zip、解压、手工拼接,字段名是数字编号,可读性差按文件列表批量解析,自动转成中文表头,pd.concat即可合并多个报告期
季度更新靠人工记忆,定期重新跑一遍下载流程基于哈希清单比对,只重下缺失或过期文件,脚本可交给定时任务无人值守

🚀 安装与最短可运行片段

安装命令一条,包含 pandas、tdxpy 等依赖:

pip install -U 'mootdx[all]'

下面的片段演示最短流程:取最新一期文件名并解析成本地 DataFrame,核心只用了两个方法:

from mootdx.affair import Affair files = Affair.files() # 从远端哈希清单取全部报告期 latest = files[0]['filename'] # 首条即最新一期,如 gpcw20241231.zip df = Affair.parse(downdir='output', filename=latest) print(df.shape, list(df.columns)[:8])

预期输出是 DataFrame 的形状和若干列名:索引为股票代码,列是"基本每股收益""营业收入""资产总计"等中文字段,一家上市公司一行。整个过程不需要安装或启动通达信客户端,只要求网络可达。

📄 财务文件怎么批量下载

一次回补多年历史报告期

Affair.fetch(downdir)不带文件名参数时执行批量下载,内部逐条比对本地文件的 md5,已存在的直接跳过,重复执行没有副作用。下载完成后按文件名循环解析,并用文件名中间 8 位作为报告期标识合并成长表:

from mootdx.affair import Affair import glob import pandas as pd Affair.fetch(downdir='output') # 批量下载,已存在的文件按 md5 跳过 rows = [] for path in glob.glob('output/gpcw*.zip'): name = path.rsplit('/', 1)[1] df = Affair.parse(downdir='output', filename=name) df['period'] = name[4:12] # gpcw20191231.zip -> 20191231 rows.append(df.reset_index()) hist = pd.concat(rows, ignore_index=True) hist.to_csv('gpcw_history.csv', index=False)

得到的是一张"代码 + 报告期"为联合主键的平铺表,可以直接导入数据库或按公司透视成宽表。

用命令行导出文件

不想写 Python 时,随包提供的mootdx affair命令覆盖同样功能:-l列出全部报告期、-a批量下载、-p解析单个文件,-o可指定 CSV、Excel 等输出格式:

mootdx affair -f gpcw20191231.zip -d output -o output/gpcw20191231.csv

⏰ 让财务数据定期自动刷新

仓库里 mootdx/tools/DownloadTDXCaiWu.py 是一个独立的更新脚本:先从 data.tdx.com.cn 拉取 gpcw.txt、gpszsh.txt 两份哈希清单,与本地通达信安装目录下的财务数据目录(默认new_tdx/vipdoc/cw)逐条比对,只下载哈希不一致或缺失的数据包,校验后再复制回通达信目录:

from mootdx.tools.DownloadTDXCaiWu import DownloadTDXCaiWu DownloadTDXCaiWu().run(clear_temp_dir=False)

整个流程是幂等的,网络中断后重跑只会补齐缺口。把这条语句包一层 cron 或 Windows 计划任务,就是低成本的定期更新机制。注意它写入的是工作目录下的 new_tdx,接入已有通达信安装时要确认路径。

解析结果的常见现象与处理

  1. 字段里出现大量 0 或异常数值。现象:某些指标为 0,或出现 -4e+34 这类占位负数;原因:通达信口径中空值以 0 存储,不适用项用占位值填充,并非公司真实值;处理:按指标含义过滤后再计算,300 多个字段编号与含义的对照见 docs/api/fields.md。
  2. 首次下载超时或速度很慢。现象:连接失败或长时间无进度;原因:请求走通达信行情公网服务器(默认 7727 端口),公开 IP 质量参差;处理:先执行mootdx bestip测速并把最快服务器写入 config.json,再重试下载。
  3. 最新一期文件只有几百字节。现象:最新一期 zip 下载后仅一两百字节,解析出的行很少;原因:哈希清单更新领先于包体,文件可能仍在生成或只发布了部分;处理:回退到上一期使用,或借助更新脚本的 md5 校验确认包体完整后再入库。

边界说明

mootdx 的财务数据来自通达信公开数据通道,字段与口径以通达信规范为准,适合搭建本地研究库和做因子筛选;对外披露口径请以交易所公告为准。更多用法参考仓库内 docs/api/affair.md 与 mootdx/financial/ 源码。文中数据仅供研究参考,不构成投资建议。

【免费下载链接】mootdx通达信数据读取的一个简便使用封装项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进