使用configparser写入文件时如何定义config.ini条目的顺序?
解决configparser生成config.ini条目顺序随机的问题
嘿,这个问题我之前也踩过坑!默认情况下configparser用的是普通字典,写入文件时条目顺序会被打乱,确实很影响配置文件的可读性。要保持条目顺序,其实有几个简单靠谱的办法:
方法一:使用OrderedDict(兼容Python 3.2+)
在初始化ConfigParser的时候,指定dict_type为collections.OrderedDict,这样就能严格按照你添加条目的顺序生成配置文件:
import configparser from collections import OrderedDict # 初始化带有序字典的ConfigParser config = configparser.ConfigParser(dict_type=OrderedDict) # 按你想要的顺序添加配置项 config['DEFAULT'] = { 'ServerAliveInterval': '45', 'Compression': 'yes', 'CompressionLevel': '9' } config['bitbucket.org'] = {} config['bitbucket.org']['User'] = 'hg' config['topsecret.server.com'] = {} topsecret = config['topsecret.server.com'] topsecret['Port'] = '50022' topsecret['ForwardX11'] = 'no' # 写入文件,顺序完全和添加时一致 with open('config.ini', 'w') as configfile: config.write(configfile)
方法二:利用Python 3.7+的有序内置dict
从Python 3.7开始,内置的dict已经默认保持插入顺序了,如果你不需要兼容3.7以下的版本,直接初始化默认的ConfigParser就行,生成的配置文件也会保留条目顺序:
import configparser # 3.7+版本直接用默认初始化即可 config = configparser.ConfigParser() # 后续添加和写入代码和上面一样
额外提示
如果是读取已有的配置文件、修改后再写入,想要保留原文件的条目顺序,同样需要在初始化ConfigParser时指定dict_type=OrderedDict(或3.7+用默认dict),这样读取时就会保留原文件的顺序,修改后写入也不会乱序。
亲测这两种方法都能完美解决条目顺序随机的问题,生成的config.ini可读性拉满,后续修改配置也能轻松找到对应的选项~
内容的提问来源于stack exchange,提问作者Honeybear
相关产品推荐
相关产品推荐

