You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python解析宝可梦文本文件:提取名称及招式使用率问题

宝可梦TXT数据解析修正方案

核心解决思路

针对原代码无法捕获宝可梦名称、输出带多余格式符号的问题,通过状态追踪+格式过滤实现精准提取:

  1. 识别宝可梦名称行(匹配文件格式特征),记录当前处理的目标宝可梦
  2. 识别招式行,拆分招式名称与使用率,清理多余格式标记
  3. 按「宝可梦名称+招式列表」的结构整理输出

修正后的代码实现

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:43:22