Administrator
2025-06-12 4e5eed2226fae6a057c454155565211dbc9349e9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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())