如何解析含嵌套结构的特殊格式.ini配置文件?
解析非标准格式的INI文件
问题分析
你遇到的是非标准格式的INI文件,标准INI仅支持[Section]下的Key=Value键值对,而这里的Sensors值是嵌套的类字典结构,configparser无法直接解析这种嵌套内容,只能读取为字符串,必须手动处理这个字符串。
解决思路
核心是将读取到的字符串转换为合法的Python字典,再通过字典语法访问嵌套字段。推荐用ast.literal_eval(比eval更安全),步骤如下:
- 清理字符串中多余的括号(外层的
{ (和) }是冗余的) - 将
Key=Value格式转换为Python字典的"Key": Value格式 - 用
ast.literal_eval解析处理后的字符串为字典
代码实现
import configparser import ast import re # 读取INI文件 config = configparser.ConfigParser() config.read("my_config.ini") sensor_raw_str = config["Sensors"]["Sensors"] # 1. 移除多余的外层括号 cleaned_str = sensor_raw_str.replace("{ (", "{").replace(")}", "}") # 2. 将Key=Value转换为合法的字典键值对格式 def format_key_value(match): key = match.group(1) value = match.group(2) # 区分数值和字符串类型,字符串加引号 if value.isdigit(): return f'"{key}": {value}' else: return f'"{key}": "{value}"' # 正则匹配所有Key=Value行 pattern = re.compile(r'(\w+)=(\w+)') processed_dict_str = pattern.sub(format_key_value, cleaned_str) # 3. 安全解析为Python字典 sensor_dict = ast.literal_eval(processed_dict_str) # 访问目标字段 sensor_type = sensor_dict["0"]["SensorType"] print(sensor_type) # 输出: Camera
注意事项
- 如果配置中有更复杂的结构(比如多传感器、字符串含特殊字符),需要调整正则表达式或字符串处理逻辑
- 始终用
ast.literal_eval而非eval,避免执行恶意代码风险
内容的提问来源于stack exchange,提问作者a_floating_point
相关产品推荐
相关产品推荐

