讀取.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文件
運行了半個小時,終於結束:
以后盡量直接寫入數據庫