import json import os import constant from utils import tool from utils.tool import singleton @singleton class KPLLimitUpDataManager: __yesterday_limit_up_codes = set() @classmethod # 获取最近几天的数据,根据日期倒序返回 def __get_latest_from_file(cls, type, count, max_day=tool.get_now_date_str()): files = os.listdir(constant.CACHE_PATH) file_name_list = [] for f in files: if f[10:] == f"_{type}.log": file_name_list.append((f.split("_")[0], f)) file_name_list.sort(key=lambda x: x[0], reverse=True) fresults = [] for file in file_name_list: path = f"{constant.CACHE_PATH}/{file[1]}" if not os.path.exists(path): continue with open(path, 'r') as f: lines = f.readlines() if lines: if int(file[0].replace("-", "")) <= int(max_day.replace("-", "")): fresults.append((file[0], json.loads(lines[0]))) if len(fresults) >= count: break return fresults @classmethod def __get_current_limit_up_data_records(cls, count, day=tool.get_now_date_str()): fresults = [] datas = cls.__get_latest_from_file("limit_up", count + 2, max_day=day) # 移除比今天还大的数据 fdatas = [] for d in datas: if int(d[0].replace("-", "")) > int(day.replace("-", "")): continue fdatas.append(d) datas = fdatas for i in range(len(datas)): if datas[i][0] == day: continue fresults.append(datas[i]) if len(fresults) >= count: break return fresults @classmethod def __get_yesterday_limit_up_codes(cls): yesterday_limit_up_data_records = cls.__get_yesterday_current_limit_up_records() yesterday_codes = set([x[0] for x in yesterday_limit_up_data_records]) return yesterday_codes @classmethod def __get_yesterday_current_limit_up_records(cls): yesterday_limit_up_data_records = cls.__get_current_limit_up_data_records(1)[0][1] return yesterday_limit_up_data_records def __init__(self): # 加载昨日涨停 self.__yesterday_limit_up_codes = self.__get_yesterday_limit_up_codes() def get_yesterday_limit_up_codes(self): return self.__yesterday_limit_up_codes if __name__ == '__main__': pass # print(KPLLimitUpDataManager().get_yesterday_limit_up_codes())