Python项目源码39:学生积分管理系统1.0(命令行界面+Json)
Python项目源码38:模拟炒股系统2.0(tkinter+Json)
Python项目源码35:音乐播放器2.0(Tkinter+mutagen)
Python项目源码33:待办事项列表应用2.0(命令行界面+Json+类)
Python项目32:订单销售额管理系统1.0(Tkinter+CSV)
Python项目源码29:学生缴费管理系统(Tkinter+CSV)
Python项目28:设计日志管理系统2.0(Tkinter+Json)
Python项目26:设计学生成绩管理系统(简易版)
一键解析通达信目录下的所有股票日线数据,解析好的数据全部放在股票数据文件夹里面。
Python代码解析的运行过程
# -*- coding: utf-8 -*-
# @Author : 小红牛
# 微信公众号:WdPython
import os
import struct
import pandas as pd
# 1.获取目录下的所有文件路径
def get_tdx_file_paths(tdx_dir):
# 获取通达信日线文件路径列表
day_files = []
for market in ['sh', 'sz', 'bj']:
lday_dir = os.path.join(tdx_dir, market, 'lday')
if not os.path.exists(lday_dir):
continue
for fname in os.listdir(lday_dir):
# 只取以60开头的股票,不取这个目录下的指数或其他
if fname.startswith(('sh60', 'sh68', 'sz00', 'sz30', 'bj83', 'bj87', 'bj83', 'bj92')):
# 2. if fname.endswith('.day') and fname in ['sh6', 'sz0', 'bj']:
day_files.append(os.path.join(lday_dir, fname))
return day_files
# 2.解析日线数据
def parse_tdx_day_file(data_path):
data_list = []
with open(data_path, 'rb') as f:
while True:
data = f.read(32)
if len(data) != 32:
break # 文件结束或数据不完整
# 使用小端字节序解析数据,格式:5I(日期和价格) + f(成交额) + 2I(成交量和保留)
unpacked = struct.unpack('<5If2I', data)
# 解析各字段
date_int = unpacked[0]
year = date_int // 10000
month = (date_int % 10000) // 100
day = date_int % 100
date_str = f"{year}-{month:02d}-{day:02d}"
open_price = unpacked[1] / 100.0 # 开盘价
high_price = unpacked[2] / 100.0 # 最高价
low_price = unpacked[3] / 100.0 # 最低价
close_price = unpacked[4] / 100.0 # 收盘价
amount = unpacked[5] # 成交额(元)
volume = unpacked[6] # 成交量(股)
data_list.append([
date_str,
open_price,
high_price,
low_price,
close_price,
amount,
volume
])
# 转换为DataFrame(列名首字母大写)
df = pd.DataFrame(
data_list,
columns=['Date', 'Open', 'High', 'Low', 'Close', 'Amount', 'Volume']
)
df['Date'] = pd.to_datetime(df['Date'])
df.sort_values('Date', inplace=True)
df.reset_index(drop=True, inplace=True)
return df
if __name__ == '__main__':
os.makedirs('股票数据', exist_ok=True)
tdx_dir = 'E:/zd_cjzq/vipdoc' # 修改为你的通达信目录
file_paths = get_tdx_file_paths(tdx_dir)
for file_path in file_paths:
print('正在解析以下目录数据'.center(50, '-'))
print(file_path)
# 解析并保存
df = parse_tdx_day_file(file_path)
print('后5行数据预览:'.center(30, '-'))
print(df.tail(5))
stock_code = os.path.basename(file_path).split('.')[0][-6:]
output_path = os.path.join('股票数据', f"{stock_code}.csv")
# print(output_path)
df.to_csv(output_path, index=False) # 不保存行索引
print(f"数据已保存,在股票数据文件夹中!!")
完毕!!感谢您的收看
----------★★跳转到历史博文集合★★----------
我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具 NumPy Pygame