PokéLLMon 源码解析(一)(1)https://developer.aliyun.com/article/1483586
.\PokeLLMon\poke_env\data\normalize.py
# 导入 functools 模块中的 lru_cache 装饰器 from functools import lru_cache # 使用 lru_cache 装饰器缓存函数的结果,缓存大小为 2 的 13 次方 @lru_cache(2**13) # 定义函数 to_id_str,将全名转换为对应的 ID 字符串 def to_id_str(name: str) -> str: """Converts a full-name to its corresponding id string. :param name: The name to convert. :type name: str :return: The corresponding id string. :rtype: str """ # 将输入的名字中的字母和数字提取出来,转换为小写,并拼接成字符串 return "".join(char for char in name if char.isalnum()).lower()
.\PokeLLMon\poke_env\data\replay_template.py
# 导入 os 模块 import os # 打开 replay_template.html 文件,使用绝对路径拼接得到文件路径 with open( os.path.join( os.path.dirname(os.path.realpath(__file__)), "static", "replay_template.html" ) ) as f: # 读取文件内容并赋值给 REPLAY_TEMPLATE 变量 REPLAY_TEMPLATE = f.read()
.\PokeLLMon\poke_env\data\static\abilities\construct_ability_json.py
# 导入 pandas 库,用于处理数据 import pandas as pd # 导入 json 库,用于处理 JSON 数据 # 从 "raw.txt" 文件中读取数据,使用制表符作为分隔符 X = pd.read_csv("raw.txt", "\t") # 从 X 中提取 Name 列的数值,转换为列表 name = list(X.Name.values) # 从 X 中提取 Description 列的数值,转换为列表 description = list(X.Description.values) # 将 name 列中的每个元素转换为小写,并去除空格后存储到 name_new 列表中 name_new = list(map(lambda x: x.lower().replace(" ", ""), name)) # 创建空字典 ability_dict ability_dict = {} # 遍历 name 列的长度 for i in range(len(name)): # 将 name_new[i] 作为键,name[i] 和 description[i] 组成的字典作为值,存储到 ability_dict 中 ability_dict[name_new[i]] = {"name": name[i], "effect": description[i]} # 打印 "pause" print("pause") # 打开 "ability_effect.json" 文件,以写入模式打开,文件对象为 f with open("ability_effect.json", "w") as f: # 将 ability_dict 写入到 f 中,格式化输出,缩进为 4 json.dump(ability_dict, f, indent=4) # 打印 "pause" print("pause")
.\PokeLLMon\poke_env\data\static\items\construct_item_json.py
# 导入 pandas 和 json 模块 import pandas as pd import json # 从 "raw.txt" 文件中读取数据,使用制表符作为分隔符 X = pd.read_csv("raw.txt", "\t") # 获取 Name、Effect 和 Category 列的数值 name = list(X.Name.values) effect = list(X.Effect.values) category = list(X.Category.values) # 创建空字典 item_dict item_dict = {} # 遍历 name 列的长度 for i in range(len(name)): # 将 name 列中的值按 " icon " 分割,取第一个部分作为新的名称 new_name = name[i].split(" icon ")[0] # 如果 effect 列中的值不是 NaN if str(effect[i]) != "nan": # 将新名称转换为小写并去除空格,作为字典的键,值为包含名称和效果的字典 item_dict[new_name.lower().replace(" ", "")] = {"name":new_name, "effect":effect[i]} # 打印 "pause" print("pause") # 将 item_dict 写入到 "item_effect.json" 文件中,格式化输出,缩进为 4 with open("item_effect.json", "w") as f: json.dump(item_dict, f, indent=4) # 打印 "pause" print("pause")
.\PokeLLMon\poke_env\data\static\moves\extract_gen8_moves.py
# 导入 json 和 re 模块 import json import re import json # 初始化存储招式名称和效果的列表 move_name_list = [] move_effect_list = [] # 打开文件 "gen8_raw.txt" 以只读模式 with open("gen8_raw.txt", "r") as f: idx = 0 # 循环读取文件中的每一行数据 for i in range(2184): data = f.readline() # 每三行数据为一组,分别提取招式名称和效果 if idx % 3 == 0: move_name = data.split(" ")[0] move_name_list.append(move_name) elif idx % 3 == 1: effect = data[:-1] move_effect_list.append(effect) idx += 1 # 将招式名称和效果列表组合成字典 move2effect = dict(zip(move_name_list, move_effect_list)) # 打开文件 "gen8moves.json" 以只读模式 with open("gen8moves.json", "r") as f: # 加载 JSON 文件内容到 gen8moves 字典中 gen8moves = json.load(f) # 初始化新的招式名称到效果的字典 move2effect_new = dict() # 遍历 gen8moves 字典中的每个招式和信息 for move, info in gen8moves.items(): try: # 尝试从 move2effect 字典中获取招式对应的效果 effect = move2effect[info['name']] # 将招式和效果添加到新的字典中 move2effect_new[move] = effect except: # 如果出现异常则继续下一个招式 continue # 打开文件 "gen8moves_effect.json" 以写入模式 with open("gen8moves_effect.json", "w") as f: # 将新的招式名称到效果的字典以美观的格式写入到文件中 json.dump(move2effect_new, f, indent=4)
.\PokeLLMon\poke_env\data\__init__.py
# 从 poke_env.data.gen_data 模块中导入 GenData 类 # 从 poke_env.data.normalize 模块中导入 to_id_str 函数 # 从 poke_env.data.replay_template 模块中导入 REPLAY_TEMPLATE 常量 from poke_env.data.gen_data import GenData from poke_env.data.normalize import to_id_str from poke_env.data.replay_template import REPLAY_TEMPLATE # 定义 __all__ 列表,包含需要导出的模块成员 __all__ = [ "REPLAY_TEMPLATE", "GenData", "to_id_str", ]
PokéLLMon 源码解析(一)(3)https://developer.aliyun.com/article/1483589