import os
import struct
import math# 根据二进制前两段拿到日期分时
def get_date_str(h1, h2) -> str: # H1->0,1字节; H2->2,3字节;year = math.floor(h1 / 2048) + 2004 # 解析出年month = math.floor(h1 % 2048 / 100) # 月day = h1 % 2048 % 100 # 日hour = math.floor(h2 / 60) # 小时minute = h2 % 60 # 分钟if hour < 10: # 如果小时小于两位, 补0hour = "0" + str(hour)if minute < 10: # 如果分钟小于两位, 补0minute = "0" + str(minute)return str(year) + "-" + str(month) + "-" + str(day) + " " + str(hour) + ":" + str(minute)# 根据通达信.lc5文件,生成对应名称的csv文件
def stock_lc5(filepath, name, targetdir) -> None:# (通达信.lc5文件路径, 通达信.lc5文件名称, 处理后要保存到的文件夹)with open(filepath, 'rb') as f: # 读取通达信.lc5文件,并处理file_object_path = targetdir + name + '.csv' # 设置处理后保存文件的路径和名称file_object = open(file_object_path, 'w+') # 打开新建的csv文件,开始写入数据title_list = "Date,Open,High,Low,Close,Open_interest,Volume,settlement_price\n" # 定义csv文件标题file_object.writelines(title_list) # 将文件标题写入到csv中while True:li2 = f.read(32) # 读取一个5分钟数据if not li2: # 如果没有数据了,就退出breakdata2 = struct.unpack('HHffffllf', li2) # 解析数据date_str = get_date_str(data2[0], data2[1]) # 解析日期和分时data2_list = list(data2) # 将数据转成listdata2_list[1] = date_str # 将list二个元素更改为日期 时:分del (data2_list[0]) # 删除list第一个元素for dl in range(len(data2_list)): # 将list中的内容都转成字符串strdata2_list[dl] = str(data2_list[dl])data2_str = ",".join(data2_list) # 将list转换成字符串strdata2_str += "\n" # 添加换行file_object.writelines(data2_str) # 写入一行数据file_object.close() # 完成数据写入# 设置通达信.day文件所在的文件夹
path_dir = 'C:\\new_tdxqh\\vipdoc\\ds\\fzline\\'
# 设置数据处理好后,要将csv文件保存的文件夹
target_dir = '../lc5/'
# 读取文件夹下的通达信.day文件
listfile = os.listdir(path_dir)
# 逐个处理文件夹下的通达信.day文件,并生成对应的csv文件,保存到../day/文件夹下
for fname in listfile:stock_lc5(path_dir + fname, fname, target_dir)
else:print('The for ' + path_dir + ' to ' + target_dir + ' loop is over')print("文件转换已完成")
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!