7709-服务器文件读取¶
作用¶
0x06b9 是通达信服务器文件读取命令。eltdx 提供单块读取、扁平便捷入口、整文件下载和已知格式解析四种调用方式;底层仍只解析传输块。
| 层级 | 调用方法 | 返回 | 职责 |
|---|---|---|---|
| 主要调用 | client.resources.read(path, offset=0, size=30000) |
FileContentChunk |
发起一次 0x06b9 请求,解析长度头和原始文件块 |
| 便捷调用 | client.read_server_file(path, offset=0, size=30000) |
FileContentChunk |
使用扁平入口读取同一个服务器文件块 |
| 完整下载 | client.resources.download_file(path, chunk_size=30000) |
bytes |
按实际返回长度推进偏移,循环拼接全部文件块 |
| 下载并解析 | client.resources.read_stats() |
TdxStatsResource |
下载 zhb.zip,解压并按 GBK 解析 tdxstat.cfg 和 tdxstat2.cfg |
底层接口:0x06b9。read_stats() 是该命令的上层便捷调用,不是新的二进制命令。
示例¶
读取单个文件块¶
from eltdx import TdxClient
with TdxClient(timeout=3) as client:
chunk = client.read_server_file("zhb.zip", offset=0, size=30000)
print(chunk.chunk_len, chunk.is_last)
下载完整文件¶
with TdxClient(timeout=3) as client:
payload = client.resources.download_file("zhb.zip")
print(len(payload))
解析 zhb.zip¶
with TdxClient(timeout=3) as client:
stats = client.resources.read_stats()
stat, stat2 = stats.row(0, "000001") # 0=深圳,1=上海
print(stats.stats_date, stat, stat2)
如果已经取得 ZIP bytes,可以只调用纯解析函数:
from eltdx.stats import parse_tdx_stats_archive
stats = parse_tdx_stats_archive(payload, source_path="local://zhb.zip")
文件块参数¶
| 参数 | 含义 |
|---|---|
path |
服务器文件路径;必须是 ASCII,最长 300 字节,反斜杠会转成 / |
offset |
文件读取偏移,uint32,默认 0 |
size |
单块请求字节数,范围 1..60000,默认 30000;60000 是服务端单次响应上限 |
chunk_size |
整文件下载使用的块大小,范围同 size |
max_bytes |
download_file() 可选的下载字节上限;用于只取文件前缀或限制内存占用 |
当文件长度恰好是 chunk_size 的整数倍时,下载器会再请求一次并在收到空块后结束。
文件块返回字段¶
FileContentChunk 字段 |
含义 |
|---|---|
path |
规范化后的服务器路径 |
offset |
本次读取偏移 |
request_size |
本次请求字节数 |
chunk_len |
服务端实际返回字节数 |
content |
文件块原始 bytes |
raw_payload |
包含长度头的原始响应 payload |
is_last |
chunk_len < request_size 时为 True |
tdxstat.cfg 解析字段¶
每行以 | 分隔,至少 35 列。列号从 0 开始,短行会跳过。
| 列号 | TdxStatRow 字段 |
含义 |
|---|---|---|
| 0 | market_id |
市场编号,通常 0=深圳、1=上海 |
| 1 | code |
六位证券代码 |
| 2 | beta_60d |
60 日 Beta |
| 3 | pe_ttm |
滚动市盈率 |
| 4 | stats_date |
统计日期,格式通常为 YYYYMMDD |
| 11 | free_float_shares_10k |
自由流通股本,单位万股 |
| 26 | year_limit_up_days |
年内涨停天数 |
| 31 | limit_stat_days |
连板统计窗口天数 |
| 32 | limit_up_count_in_stat_days |
统计窗口内涨停次数 |
| 33 | limit_up_streak_days |
连续涨停天数 |
tdxstat2.cfg 解析字段¶
每行以 | 分隔,至少 21 列。
| 列号 | TdxStat2Row 字段 |
含义 |
|---|---|---|
| 0 | market_id |
市场编号 |
| 1 | code |
六位证券代码 |
| 2 | stats_date |
统计日期 |
| 3 | amount_10k |
当日成交额,单位万元 |
| 4 | seal_amount_10k |
当日封单金额,单位万元 |
| 5 | prev_amount_10k |
前一日成交额,单位万元 |
| 6 | prev_seal_amount_10k |
前一日封单金额,单位万元 |
| 7 | prev2_amount_10k |
前两日成交额,单位万元 |
| 8 | prev2_seal_amount_10k |
前两日封单金额,单位万元 |
| 9 | open_volume_hand |
当日开盘成交量,单位手 |
| 10 | prev_open_volume_hand |
前一日开盘成交量,单位手 |
| 14 | open_amount_10k |
当日开盘成交额,单位万元 |
| 15 | prev_open_amount_10k |
前一日开盘成交额,单位万元 |
空白或无法转换的数值字段返回 None。TdxStatsResource.stat 和 stat2 都以 (market_id, code) 为键;row(market_id, code) 可同时取得两个文件中的对应记录。stats_date 是全部有效记录中出现次数最多的日期。
格式校验边界¶
解析器会校验 ZIP 大小、条目数量、加密条目、解压后大小、两个必需 CFG 是否各存在一份,以及同一 CFG 内是否有重复证券键。它不强制完整文件必须达到特定行数或日期覆盖率,也不负责判断两个 CFG 的业务日期是否可用于某个交易日。
解析过程不会写入磁盘,也不包含 AxData 的缓存、文件锁、失败退避、自动刷新和交易日对齐策略。
0x06b9 可以读取其他服务器文件,但 eltdx 不会猜测任意文件的格式。除 zhb.zip 外,调用者通过 read() 或 download_file() 取得原始 bytes 后自行处理。