[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格式。