Python下如何编写不含虚拟节头的INI格式配置文件
无节头INI配置生成实现方案(Python 2.7兼容、适配Python 3)
标准ConfigParser(Python 2.7 内置模块为ConfigParser,Python 3 迁移后为configparser)默认要求所有配置项必须归属于指定节,写入文件时会自动渲染[节名]格式的节头。要实现输出不带虚拟节头的纯键值配置文件,可通过重写写入逻辑实现,完全兼容无节头INI的解析规则。
核心注意点
- 原生
ConfigParser的set方法仅接受字符串类型参数,直接传入整数、布尔值会触发类型错误,需要提前做类型转换。 - 自定义写入逻辑输出的键值分隔符,需要和无节头INI的解析规则保持一致,避免读取时出现解析偏差。
兼容双版本的实现代码
# 适配Python 2.7 / Python 3 的导入逻辑 try: import ConfigParser BaseConfig = ConfigParser.RawConfigParser except ImportError: import configparser as ConfigParser BaseConfig = ConfigParser.RawConfigParser class FlatIniWriter(BaseConfig): # 自定义内部使用的虚拟全局节名,不会输出到文件 VIRTUAL_GLOBAL_SECTION = "VIRTUAL_ROOT" def write(self, fp, space_around_delimiters=True): # 重写写入方法,跳过节头渲染 delimiter = " = " if space_around_delimiters else "=" # 仅提取虚拟全局节下的所有配置项,逐行写入 for key, val in self.items(self.VIRTUAL_GLOBAL_SECTION): # 用format语法兼容Py2.7,避免低版本语法不兼容 fp.write("{0}{1}{2}\n".format(key, delimiter, val))
实际使用方法
# 初始化写入实例 writer = FlatIniWriter() # 初始化虚拟全局节 writer.add_section(FlatIniWriter.VIRTUAL_GLOBAL_SECTION) # 写入配置项,注意将非字符串值提前转换为字符串 writer.set(FlatIniWriter.VIRTUAL_GLOBAL_SECTION, "option1", str(99)) writer.set(FlatIniWriter.VIRTUAL_GLOBAL_SECTION, "option2", str(34)) writer.set(FlatIniWriter.VIRTUAL_GLOBAL_SECTION, "do_it", str(True)) # 输出文件,无任何节头 with open("my.ini", "w") as f: writer.write(f)
最终生成的my.ini文件内容为:
option1 = 99 option2 = 34 do_it = True
格式兼容性
该实现生成的配置文件格式,可直接适配常见的无节头INI解析逻辑:读取时仅需在内容流开头临时补上[VIRTUAL_ROOT]节头,即可复用标准ConfigParser的解析能力,无需额外格式适配。
内容的提问来源于stack exchange,提问作者anatolyg
相关产品推荐
相关产品推荐

