Python读取通达信日线数据
时间: 2025-05-24 18:00:22 浏览: 42
### 如何使用 Python 读取通达信的日线数据
要实现通过 Python 从通达信获取日线数据的功能,可以按照以下方式操作。具体来说,可以通过解析通达信 `.day` 文件来提取其中的数据,并将其转化为 CSV 格式的文件以便后续处理。
#### 数据路径与结构说明
通达信的日线数据通常位于其安装目录下的 `vipdoc/sh/lday` 或者 `vipdoc/sz/lday` 路径下。这些文件是以二进制形式存储的 `.day` 文件,每条记录占用固定长度(32字节)。以下是各字段的具体含义:
- **第0~3字节**:日期 (整数),表示为 YYYYMMDD 的格式。
- **第4~7字节**:开盘价 * 100 (整数)。
- **第8~11字节**:最高价 * 100 (整数)。
- **第12~15字节**:最低价 * 100 (整数)。
- **第16~19字节**:收盘价 * 100 (整数)。
- **第20~23字节**:成交金额 (单位:元,浮点型)。
- **第24~27字节**:成交量 (单位:股,整数)。
- **第28~31字节**:保留字段 (暂无实际意义)[^2]。
#### 解析逻辑
为了能够正确读取和解析这些数据,需要借助 Python 中的 `struct` 模块来进行二进制解码。下面是一个完整的代码示例,展示如何逐条读取 `.day` 文件的内容并将它们写入到 CSV 文件中。
```python
import os
import struct
import pandas as pd
def parse_day_file(file_path):
"""解析单个 .day 文件"""
records = []
with open(file_path, 'rb') as f:
while True:
buf = f.read(32)
if not buf or len(buf) != 32:
break
# 使用 unpack 函数按指定格式拆分数据
a = struct.unpack('iiiiifii', buf)
year_month_day = str(a[0])
date_str = '{}-{}-{}'.format(year_month_day[:4], year_month_day[4:6], year_month_day[6:])
open_price = round(a[1] / 100.0, 2)
high_price = round(a[2] / 100.0, 2)
low_price = round(a[3] / 100.0, 2)
close_price = round(a[4] / 100.0, 2)
amount = a[5]
volume = a[6]
record = {
'date': date_str,
'open': open_price,
'high': high_price,
'low': low_price,
'close': close_price,
'amount': amount,
'volume': volume
}
records.append(record)
return records
def save_to_csv(records, output_path):
"""将解析后的数据保存至 csv 文件"""
df = pd.DataFrame(records)
df.to_csv(output_path, index=False)
# 主程序入口
if __name__ == '__main__':
tdx_data_dir = r'C:\new_tdx\vipdoc'
stock_code = 'sh600000' # 替换为目标股票代码
day_file_path = os.path.join(tdx_data_dir, stock_code[:2], 'lday', f'{stock_code}.day')
parsed_records = parse_day_file(day_file_path)
save_to_csv(parsed_records, './output.csv')
```
此脚本实现了两个主要功能:
1. 定义了一个函数用于解析单一 `.day` 文件中的所有 K 线数据;
2. 将解析得到的结果存放到 Pandas DataFrame 对象中,并最终导出成标准的 CSV 文件[^3]。
### 注意事项
当执行以上过程之前,请确保已经成功下载目标时间段内的全部历史行情数据,并确认对应的 `.day` 文件确实存在于预期位置之中。如果某些特定日子缺少相应记录,则可能是因为当天并未发生任何交易活动所致[^1]。
阅读全文
相关推荐

















