寻求Python读取类JSON特殊格式自定义配置文件的有效方法
解决自定义配置文件的Python读取问题
先梳理现有代码和配置文件的核心问题:
- 配置里的布尔值是小写
true/false,但Python的布尔值是大写True/False,ast.literal_eval无法识别小写版本 - 配置中
["dev"]块后面缺少逗号,导致替换后语法断裂 - 最后一个键值对末尾的多余逗号可能引发解析异常
下面是修正后的可运行代码:
import ast import re with open('file.ini') as f: data_str = f.read() # 把["key"]格式的键转为"key" data_str = re.sub(r'\["([^"]+)"\]', r'"\1"', data_str) # 替换赋值符号=为冒号: data_str = data_str.replace("=", ":") # 移除开头的return关键字 data_str = data_str.replace("return ", "") # 把小写布尔值转为Python识别的大写格式 data_str = data_str.replace("true", "True").replace("false", "False") # 修复dev块后缺失的逗号 data_str = re.sub(r'}\s*"logo_size"', r'}, "logo_size"', data_str) # 移除最后一个键值对后的多余逗号(可选,提升语法规范性) data_str = re.sub(r',\s*}$', '}', data_str) # 解析为Python字典 data = ast.literal_eval(data_str) # 收集所有值为True的键 true_values = [k for k, v in data.items() if v is True] print(true_values)
关键修正点说明:
- 用正则表达式精准替换键的格式,避免单纯字符串替换可能带来的误操作
- 补充了布尔值的大小写转换,这是原代码无法解析的核心原因之一
- 修复了配置文件中缺失的逗号,解决语法断裂问题
- 用列表推导式简化了True值键的收集逻辑
运行后会输出:['gradient', 'dark', 'smooth']
内容的提问来源于stack exchange,提问作者brunjy
相关产品推荐
相关产品推荐

