文件解析器¶
通达信服务器上除了行情,还有一批静态文件:板块成分、行业分类、历史专业财报。
这些文件是自定义二进制格式,本项目把解析器独立成 pytdxdata.codec 子模块:
- 纯标准库(
struct/zipfile),可以脱网单测 - 与网络层解耦,可以直接拿本地文件字节调用
- 每个解析函数的 docstring 里都写明了字节格式,方便对照排错
from pytdxdata.codec import parse_block_dat, parse_tdxhy_cfg, parse_financial_dat
blocks = parse_block_dat(open("block_gn.dat", "rb").read(), "block_gn.dat")
三类文件¶
| 文件 | 解析函数 | 产出 | 说明 |
|---|---|---|---|
block_zs/gn/fg.dat |
parse_block_dat |
list[TdxBlock] |
板块成分股代码列表 |
tdxhy.cfg |
parse_tdxhy_cfg |
dict[str, IndustryInfo] |
通达信行业 + 申万行业 |
gpcw.txt |
parse_financial_file_list |
list[FinancialFileInfo] |
财报文件索引(文件名 / MD5 / 大小) |
gpcw*.zip 内 .dat |
parse_financial_dat |
list[FinancialRecord] |
每股历史财报原始字段 |
走网络时用 TdxData 的解析方法
如果不想自己管下载,直接用封装好的方法(内部就是调这些解析器):
get_block_parsed() / get_industry_map() / get_financial_file_infos() / get_financial_records_parsed()
— 见 完整接口清单 → 除权 / 财务 / F10 / 文件。
关键细节¶
板块类型由文件名推断,因为文件头里没有可靠的分类字段:
| 文件名包含 | category |
|---|---|
zs |
0 行业 |
gn |
2 概念 |
fg |
3 风格 |
| 其他 | 0 |
单条板块记录最多 400 只成分股(代码区 2800 字节 ÷ 每只 7 字节)。
财报报告期的来源优先级:文件名 → .dat 头部内嵌值。两个都拿不到才为空。
市场字段:0 = 深,1 = 沪。
这里曾经有过一个 bug——上游实现用
<6s1c1L导致市场字段恒判为深市, 本包用<6sBL修正。见 更新日志。
API¶
服务器文件解析器:板块(.dat) / 行业(.cfg) / 历史专业财报(.zip+.dat)。
均为纯标准库实现(struct / zipfile),无第三方依赖,可独立单测。
函数:¶
infer_block_category
¶
按文件名推断板块分类:zs=行业(0) / gn=概念(2) / fg=风格(3)。
parse_block_dat
¶
parse_block_dat(
data: bytes, filename: str = ""
) -> list[TdxBlock]
解析通达信 .dat 板块文件字节内容。
参数:
-
data(bytes) –文件完整字节。
-
filename(str, 默认:'') –用于推断 category(如
block_gn.dat)。
返回:
-
list[TdxBlock]–TdxBlock 列表;数据不足或为空时返回空列表。
parse_financial_dat
¶
parse_financial_dat(
data: bytes, report_date: int = 0
) -> list[FinancialRecord]
解析 gpcw .dat 二进制(zip 内的或服务器直接给的未压缩形式都行)。
参数:
-
data(bytes) –.dat 文件完整字节。
-
report_date(int, 默认:0) –报告期 YYYYMMDD;传 0 时使用 header 内嵌的报告期。
返回:
-
list[FinancialRecord]–FinancialRecord 列表;数据不足或字段非法时返回空列表。
parse_financial_file_list
¶
parse_financial_file_list(
data: bytes,
) -> list[FinancialFileInfo]
解析 tdxfin/gpcw.txt 内容(每行 filename,md5hash,filesize)。
parse_tdxhy_cfg
¶
parse_tdxhy_cfg(content: bytes) -> dict[str, IndustryInfo]
解析 tdxhy.cfg 字节内容。
参数:
-
content(bytes) –文件完整字节(GBK 编码)。
返回:
-
dict[str, IndustryInfo]–{6位代码: IndustryInfo};空输入或非法行会被跳过。
下一步¶
- 协议与命令 — 行情数据的线上协议格式
- 场景示例 → 板块成分离线解析