您的位置:首页 > 编程语言 > Python开发

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

2018-03-02 18:37 4295 查看

[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文件。本例实现了所有的数据进行解析及存储,实现中有不对的地方,请指正。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 通达信 CSV