Python项目源码69:一键解析+csv保存通达信日线数据3.0

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值