# 数据管理 import datetime import json import os import tool class CodeDataManager: def save_data(self, data): code = data["code"] create_at = data["created_at"] day = create_at.strftime("%Y%m%d") data["created_at"] = create_at.strftime("%Y-%m-%d %H:%M:%S") file_path = "datas/{}_{}.txt".format(day, code) if not os.path.exists(file_path): with open(file_path, 'w', encoding="utf-8") as f: pass with open(file_path, "a", encoding="utf-8") as f: f.write(json.dumps(data)) f.write("\n") def get_datas(self, code): day = datetime.datetime.now().strftime("%Y%m%d") file_path = "datas/{}_{}.txt".format(day, code) datas = [] try: with open(file_path, "r") as f: while True: line = f.readline() if not line or len(line) == 0: break data = json.loads(line) datas.append(data) except: pass # 根据创建时间排序 datas = sorted(datas, key=lambda tup: int(tup["created_at"].split(" ")[1].replace(":", ""))) return datas def get_lack_datas_time_range(self, datas): def is_trade_time(time_): if int("092500") <= int(time_.replace(":", "")) <= int("113000") or int("130000") <= int( last_time.replace(":", "")) <= int("150000"): return True return False ranges = [] # 只获取18分钟内的数据 now_time_str = tool.get_now_time_str() if tool.trade_time_sub(now_time_str, "15:00:00") > 0: now_time_str = "15:00:00" if tool.trade_time_sub(now_time_str, "13:00:00") < 0 and tool.trade_time_sub(now_time_str, "11:30:00") > 0 : now_time_str = "11:30:00" # 还没到时间 if tool.trade_time_sub(now_time_str, "09:25:00") < 0: return ranges last_time = tool.trade_time_add_second(now_time_str, 0 - 18 * 60) if tool.trade_time_sub(last_time, "09:25:00") < 0: last_time = "09:25:00" if len(datas) == 0: ranges.append((last_time, now_time_str)) return ranges for data in datas: # 如果上次时间与本次时间间隔相差30s以上才补全 time_ = data["created_at"].split(" ")[1] if tool.trade_time_sub(time_, last_time) < 0: continue if tool.trade_time_sub(time_, last_time) > 30: if len(ranges) == 0 or ranges[-1][0] != last_time: if is_trade_time(last_time) and is_trade_time(time_): ranges.append((tool.trade_time_add_second(last_time, 3), tool.trade_time_add_second(time_, -3))) last_time = time_ return ranges