Viper373's picture
Upload Data_CrawlProcess/Process.py with huggingface_hub
eb3860d verified
# -*- coding:utf-8 -*-
# @FileName: Process.py
# @Description: LOL数据处理通用方法(胜率、logo、hero_info、克制关系)
import os
from typing import Dict
import orjson
from Data_CrawlProcess import env
from tool_utils.log_utils import RichLogger
from tool_utils.mysql_utils import MySQLUtils
rich_logger = RichLogger()
mysql = MySQLUtils()
# 获取项目根目录
script_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.abspath(os.path.join(script_dir, os.pardir))
class Process:
def __init__(self, rich_progress=None):
self.rich_progress = rich_progress
self.hero_list_path = env.HERO_LIST
self.hero_logo_path = env.HERO_LOGO
self.hero_info_path = env.HERO_INFO
self.hero_win_rate_path = env.HERO_WIN_RATE
def concat_hero_info(self):
count = 0
try:
with open(self.hero_list_path, 'rb') as f:
hero_list = orjson.loads(f.read()).get('hero', [])
with open(self.hero_logo_path, 'rb') as f:
hero_logo = orjson.loads(f.read())
hero_logo_dict = {str(hero.get('heroId')): hero.get('heroLogo') for hero in hero_logo}
for hero in hero_list:
hero_id = str(hero.get('heroId'))
if hero_id in hero_logo_dict:
hero['heroLogo'] = hero_logo_dict[hero_id]
count += 1
with open(self.hero_info_path, 'wb') as f:
f.write(orjson.dumps(hero_list, option=orjson.OPT_INDENT_2))
self.rich_progress.info(f"[Process] hero_info合并完成,共{count}条")
return count
except Exception as e:
self.rich_progress.error(f"[Process] hero_info合并失败: {str(e)}")
return 0
def read_win_rate(self) -> Dict[str, float]:
try:
with open(self.hero_win_rate_path, "rb") as f:
data = orjson.loads(f.read())['data']
hero_win_rates = {}
for d in data:
heroId = d["champion_id"]
playerLocation = d["positionName"][:3]
winRate = d["positionWinRate"]
hero_win_rates[f'{heroId}{playerLocation}'] = winRate
rich_logger.info(f"[Process] 成功加载英雄胜率数据丨共[{len(hero_win_rates)}]条")
return hero_win_rates
except Exception as e:
rich_logger.error(f"[Process] 读取英雄胜率数据失败: {str(e)}")
return {}