读取.day文件保存在Excel中:
# "D:\StudyFiles\ClassFile\股票证券实验报告\证券日交易行情和文本基本信息\SHday\sh000001.day"
import os import time from struct import unpack import pandas as pd # 获取day文件然后转换为正常文本
def read_data(fname, code): ''' 读取通达信day数据 ''' data = [] with open(fname, 'rb') as f: buf = f.read() num = len(buf) # 总长度
no = num / 32 # 分块长度
b = 0 # 开始指针
e = 32 # 每一个小块的长度
for i in range(int(no)): a = unpack('IIIIIfII', buf[b:e]) data_time = toDataTime(a[0]) openPrice = a[1] / 100.0 high = a[2] / 100.0 low = a[3] / 100.0 close = a[4] / 100.0 amount = a[5] / 100.0 vol = a[6] / 100.0
# 把数据添加到列表
# [股票代码,开盘价,最高价,最低价,收盘价,成交额,成交量]
data.append([code, data_time, openPrice, high, low, close, amount, vol]) b += 32 e += 32
return data # 将数据转换为时间
def toDataTime(longTime): # val = val*100
longTime = longTime / 1000 # float 时间戳格式(1019948462.2750368)
t = time.localtime(longTime) # 👆 输出time.struct_time(tm_year=2002, tm_mon=4, tm_mday=28, tm_hour=7, tm_min=1, tm_sec=2, tm_wday=6, tm_yday=118, tm_isdst=0)
week = time.strftime("%A", t) # 输出Sunday 星期几
strTime = time.strftime("%Y-%m-%d %H:%M:%S", t) # 输出 2002-04-28 07:01:02
return strTime # 将目录与检索的文件名组合为路径,得到一个包含所有文件的路径
def getfileName(fname, suf): fileNames = [] for i in range(0, len(suf)): fileNames.append(fname + suf[i]) return fileNames # 检索文件名得到一个包含所有文件名的列表
def getFileSuf(fname): suf = os.listdir(fname) return suf def getData(): data = [] fname = r'D:\StudyFiles\ClassFile\股票证券实验报告\证券日交易行情和文本基本信息\SHday\\' suf = getFileSuf(fname) # 股票代码
fileNameList = getfileName(fname, suf) # 股票路径
code = [] for i in suf: code.append(i.split(".")[0]) for i in range(0, len(fileNameList)): # 循环获取 len(fileNameList) 数据量太大 取 10 减少数据量
data.append(read_data(fileNameList[i], code[i])) return data # 制作表格,返回
def makeDataFrame(): col = ['股票代码', '日期', '开盘价', '最高价', '最低价', '收盘价', '成交额', '成交量'] data = getData() suf = getFileSuf('D:\StudyFiles\ClassFile\股票证券实验报告\证券日交易行情和文本基本信息\SHday\\') for i in range(0,len(data)): index = [j for j in range(1, len(data[i]) + 1)] df = pd.DataFrame(data[i], index=index, columns=col) saveDataFrame(df, suf[i]) # 保存表格
def saveDataFrame(df, code): codeList = code.split(".") df.to_excel("D:\StudyFiles\ClassFile\股票证券实验报告\实验一结果\\" + codeList[0] + ".xlsx") if __name__ == '__main__': makeDataFrame()
.day文件
运行了半个小时,终于结束:
以后尽量直接写入数据库