Python解析宝可梦文本文件:提取名称及招式使用率问题
宝可梦TXT数据解析修正方案
核心解决思路
针对原代码无法捕获宝可梦名称、输出带多余格式符号的问题,通过状态追踪+格式过滤实现精准提取:
- 识别宝可梦名称行(匹配文件格式特征),记录当前处理的目标宝可梦
- 识别招式行,拆分招式名称与使用率,清理多余格式标记
- 按「宝可梦名称+招式列表」的结构整理输出
修正后的代码实现
def parse_pokemon_data(file_path): pokemon_list = [] current_name = None current_moves = [] with open(file_path, 'r', encoding='utf-8') as f: for line in f: line = line.strip() if not line: continue # 跳过空行 # 匹配宝可梦名称行(示例格式:### 皮卡丘,可根据实际文件调整规则) if line.startswith('### '): # 保存上一个宝可梦的数据 if current_name and current_moves: pokemon_list.append({ 'name': current_name, 'moves': current_moves.copy() }) # 更新当前宝可梦名称,重置招式列表 current_name = line.replace('### ', '') current_moves.clear() # 匹配招式行(示例格式:- 十万伏特: 85%) elif line.startswith('- ') and ':' in line: # 清理格式符号,拆分招式名与使用率 move_info = line.lstrip('- ').split(':', 1) move_name = move_info[0].strip() usage_rate = move_info[1].strip() current_moves.append((move_name, usage_rate)) # 保存最后一个宝可梦的数据 if current_name and current_moves: pokemon_list.append({ 'name': current_name, 'moves': current_moves }) # 格式化输出结果 for pokemon in pokemon_list: print(f"*宝可梦名称*: {pokemon['name']}") print("招式及使用率:") for move, usage in pokemon['moves']: print(f"- {move}: {usage}") print('---') # 调用示例:替换为你的数据文件路径 parse_pokemon_data('pokemon_data.txt')
自定义适配说明
如果你的TXT文件格式不同,只需调整对应匹配规则:
- 若宝可梦名称格式为
[喷火龙],将名称匹配行改为:if line.startswith('[') and line.endswith(']'): current_name = line[1:-1].strip() - 若招式格式为
* 雷电拳 (70%),将招式处理行改为:move_name = line.lstrip('* ').split(' (')[0].strip() usage_rate = line.split('(')[1].rstrip(')').strip()
内容的提问来源于stack exchange,提问作者chris chan
相关产品推荐
相关产品推荐

