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

将文本文件转为嵌套字典时触发ValueError,寻求解决方法

问题原因及解决方案

错误根源

你遇到的ValueError是因为文本文件内容不是合法的Python字典字面量,核心问题有三个:

  • 文件开头的EMOJI_DATA = 属于变量赋值语句,不是字典本身,ast.literal_eval无法解析;
  • status字段的值fully_qualified是未加引号的标识符,ast.literal_eval只识别字符串、数字、列表、字典等字面量,不认未定义的变量名;
  • 最后一个字典条目末尾多了逗号,属于语法错误。

修复步骤

1. 直接修改文本文件

把.txt文件改成纯字典格式,修正所有问题:

{
    u'\U0001F947': { # 🥇
        'en' : ':1st_place_medal:',
        'status' : 'fully_qualified',
        'E' : 3,
        'de': ':goldmedaille:',
        'es': ':medalla_de_oro:',
        'fr': u':médaille_d’or:',
        'pt': ':medalha_de_ouro:',
        'it': u':medaglia_d’oro:',
        'fa': u':مدال_طلا:'
    },
    u'\U0001F948': { # 🥈
        'en' : ':2nd_place_medal:',
        'status' : 'fully_qualified',
        'E' : 3,
        'de': ':silbermedaille:',
        'es': ':medalla_de_plata:',
        'fr': u':médaille_d’argent:',
        'pt': ':medalha_de_prata:',
        'it': u':medaglia_d’argento:',
        'fa': u':مدال_نقره:'
    },
    u'\U0001F949': { # 🥉
        'en' : ':3rd_place_medal:',
        'status' : 'fully_qualified',
        'E' : 3,
        'de': ':bronzemedaille:',
        'es': ':medalla_de_bronce:',
        'fr': u':médaille_de_bronze:',
        'pt': ':medalha_de_bronze:',
        'it': ':medaglia_di_bronzo:',
        'fa': u':مدال_برنز:'
    }
}

2. 代码层面处理(无需修改原文件)

如果不想改动原文本,可在读取内容后做预处理:

import ast

with open('emoji_data.txt', encoding="utf8") as f:
    data = f.read()

# 移除开头的变量赋值语句
data = data.split('=', 1)[-1].strip()
# 将未加引号的fully_qualified替换为字符串形式
data = data.replace('fully_qualified', "'fully_qualified'")
# 移除末尾多余的逗号
data = data.rstrip(',').rstrip()

print("转换前数据类型:", type(data))
data = ast.literal_eval(data)
print("转换后数据类型:", type(data))

验证结果

执行代码后,data会被成功转换为字典类型,不再触发ValueError。

内容的提问来源于stack exchange,提问作者jack gell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:35:25