python读取通达信每日数据和五分钟数据,并且上传到clickhouse

读取通达信每日数据和五分钟数据,并且上传到
本文主要是借助txd和实现数据下载,并上传到数据库,实现高效的数据查询和统计
通达信读取五分钟数据
通达信将分钟数据文件.lc 转换为cvs格式,这里可以通过直接导入cvs格式文件,转换代码在下面,导入后是多个文件夹,表名为股票代码
import osimport structimport mathfrom tqdm import tqdm# 根据二进制前两段拿到日期分时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_tdx//vipdoc//sh//fzline'# 设置数据处理好后,要将csv文件保存的文件夹target_dir = 'D:\TDXdata\lc/'# 读取文件夹下的通达信.day文件listfile = os.listdir(path_dir)tq = tqdm(listfile, leave=False, position=None)# 逐个处理文件夹下的通达信.day文件,并生成对应的csv文件,保存到../day/文件夹下for fname in tq:stock_lc5(path_dir+os.sep+fname, fname, target_dir)else:print('The for ' + path_dir + ' to ' + target_dir + 'loop is over')print("文件转换已完成")
# 配置部分开始debug = False# 是否开启调试日志输出开=True关=False# 目录最好事先手动建立好,不然程序会出错tdx = {'tdx_path': 'C:/new_tdx',# 指定通达信目录'csv_lday': 'd:/TDXdata/lday_qfq',# 指定csv格式日线数据保存目录'pickle': 'd:/TDXdata/pickle',# 指定pickle格式日线数据保存目录'csv_index': 'd:/TDXdata/index',# 指定指数保存目录'csv_cw': 'd:/TDXdata/cw',# 指定专业财务保存目录'csv_gbbq': 'd:/TDXdata',# 指定股本变迁保存目录'pytdx_ip': '123.125.108.23',# 指定pytdx的通达信服务器IP'pytdx_port': 7709,# 指定pytdx的通达信服务器端口 。int类型}index_list = [# 通达信需要转换的指数文件 。通达信按998查看重要指数'sh999999.day',# 上证指数'sh000300.day',# 沪深300'sz399001.day',# 深成指]# 配置部分结束
这里的代码来自参考代码的第一条,主要是这个大佬,文件处理的很好,因此这里不做修改