Python 2.7中能否将冒号设为ConfigParser配置文件的分隔符?
解决Python 2.7 ConfigParser用冒号作为键值分隔符的问题
既然没法升级到Python3,那我们可以通过自定义SafeConfigParser的子类来改写它的写入逻辑,强制用冒号作为键值对的分隔符,替代默认的等号。
自定义分隔符的ConfigParser子类
我们直接重写父类的write方法,把原本生成option = value的逻辑替换成option: value:
import ConfigParser import os class ColonSeparatedConfig(ConfigParser.SafeConfigParser): def write(self, fp): # 处理默认配置段 if self._defaults: fp.write("[%s]\n" % ConfigParser.DEFAULTSECT) for key, value in self._defaults.items(): fp.write("%s: %s\n" % (key, str(value).replace('\n', '\n\t'))) fp.write("\n") # 处理自定义配置段 for section in self._sections: fp.write("[%s]\n" % section) for key, value in self._sections[section].items(): if key == "__name__": continue # 格式化键值对为冒号分隔格式 formatted_line = "%s: %s" % (key, str(value).replace('\n', '\n\t')) fp.write("%s\n" % formatted_line) fp.write("\n")
使用自定义类处理配置读写
接下来用这个子类替换原有的SafeConfigParser,就能实现你想要的效果:
# 替换成你的实际文件路径 myPath = "./" config = ColonSeparatedConfig() # 读取原有配置文件 config.read(os.path.join(myPath, 'settings.cfg')) # 添加新配置段和配置项 config.add_section("new_section") config.set('new_section', "option", "value") # 写入新的配置文件 with open(os.path.join(myPath, 'new_settings.cfg'), 'w') as f: config.write(f)
执行后生成的new_settings.cfg内容会变成:
[new_section] option: value
而且不管原settings.cfg里原本用的是等号还是冒号分隔,写入新文件时都会统一换成冒号格式,正好解决了你提到的原有分隔符被改成等号的问题。
内容的提问来源于stack exchange,提问作者Alexey Mishuk
相关产品推荐
相关产品推荐

