[python]通达信历史日线数据解析转换为CSV文件进行存储

[python]通达信历史日线数据解析转换为CSV文件进行存储

参考:http://blog.csdn.net/liuyukuan/article/details/53560278

通达信日线数据为其自有格式,无法使用excel进行读取,本文对通达信日线数据进行解析,转换为CSV格式进行存储,方便进行读取和分析。
通达信的日线数据在通达信的安装目录: vipdoc\sh\lday 和vipdoc\sz\lday下面,数据的扩展名为.day,不能使用EXCEL直接进行读取。
通达信的日线数据格式如下:
每32个字节为一天数据
每4个字节为一个字段,
每个字段内低字节在前00 ~ 03 字节:年月日,
整型04 ~ 07 字节:开盘价*100,
整型08 ~ 11 字节:最高价*100,
整型12 ~ 15 字节:最低价*100,
整型16 ~ 19 字节:收盘价*100,
整型20 ~ 23 字节:成交额(元),
float型24 ~ 27 字节:成交量(股),
整型28 ~ 31 字节:(保留)

# %% 导入包
from struct import *
import os
import pandas as pd
#

def exactStockdatatocsv(sourcedir,targetdir,stockfile):
    #原始数据读取存储入缓存
    srcfile = open(sourcedir + os.sep + stockfile, 'rb')
    buffer = srcfile.read()
    srcfile.close()
    #读取的数据长度
    buflengh = len(buffer) #32的整数倍
    #除32获利文件中存储了多少天的信息
    datenum = int(buflengh / 32)
    #解析每一天的数据的内容,每一天列表的起始位置和终止位置
    list_begin = 0
    list_end = 32
    #创建pandas股票数据表
    seriesdata = pd.Series() #创建列表
    stockdata = pd.DataFrame(index =range(0,datenum),
           columns =['date','open','high','low','close','amount','volum'])
    print(stockdata.index)
    #将个股数据转换为pandas的dataFrame格式数据
    for i in range(datenum):
        #解析32个字节一天数据
        unitdata = unpack('IIIIIfII', buffer[list_begin:list_end])
        date  = unitdata[0]
        opens = unitdata[1] / 100.0
        high  = unitdata[2] / 100.0
        low   = unitdata[3] / 100.0
        close = unitdata[4] / 100.0
        amount = unitdata[5] / 10.0
        vol = unitdata[6]
        unused = unitdata[7]
         #加32指向下一天的数据列表
        list_begin = list_begin + 32
        list_end = list_end + 32

        seriesdata = [ date, opens, high, low, close, amount, vol]
       # print(unitdata)
        stockdata.at[stockdata.index[i],'date'] = seriesdata[0]
        stockdata.at[stockdata.index[i],'open'] = seriesdata[1]
        stockdata.at[stockdata.index[i],'high'] = seriesdata[2]
        stockdata.at[stockdata.index[i],'low']  = seriesdata[3]
        stockdata.at[stockdata.index[i],'close'] = seriesdata[4]
        stockdata.at[stockdata.index[i],'amount'] = seriesdata[5]
        stockdata.at[stockdata.index[i],'volum']  = seriesdata[6]
    #生成对应的文件
    savefilename = stockfile[0:8]
    print(savefilename)
    stockdata.to_csv(targetdir + os.sep + savefilename +' .csv', encoding='gbk')
 #通达信上证日线数据目录
shpathdir='D:/new_tdx/vipdoc/sh/lday'
 #通达信深证日线数据目录
szpathdir='D:/new_tdx/vipdoc/sz/lday'
 #通达信数据转换后存储目录
shtargetDir='shlday'
sztargetDir='szlday'

 #将上证目录下的所有文件列表出来
szlistfile = os.listdir(szpathdir)
for stockfile in szlistfile:
    print(stockfile)
    exactStockdatatocsv(szpathdir,sztargetDir,stockfile)
 #将上证目录下的所有文件列表出来
shlistfile = os.listdir(shpathdir)
for stockfile in shlistfile:
    print(stockfile)
    exactStockdatatocsv(shpathdir,shtargetDir,stockfile)

通过上面的代码将上证数据和深证数据都转换为CSV格式。

本代码实现与其他参考实例不同的是从文件读取数据进行解析后,生成pandas的dataFrame格式进行存储,然后生成CSV文件。本例实现了所有的数据进行解析及存储,实现中有不对的地方,请指正。

  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值