在ConfigParser中写入小写的'default'部分
我正在处理一个ini文件,这个文件的默认部分叫做'default',而不是'DEFAULT'。Python的ConfigParser
似乎可以很好地处理这些部分,没有问题。不过,不知道为什么,它们不允许你添加一个'default'部分或者往里面写东西。代码里硬性规定了,你不能创建任何不区分大小写的'DEFAULT'版本的部分。
所以,如果我不能添加'default'部分,那我该怎么往里面写呢?规范上说你可以往'DEFAULT'写,因为这个部分总是存在的。但是,我该怎么往'default'写呢?
我想保持文件的格式一致,所以我希望默认部分用小写字母写,而不是全大写。
如果文件还不存在,我想添加[default]部分。往'default'部分写东西时,我会遇到ValueError: Invalid section name: default
的错误。
(注意:如果我使用一个已经格式正确的文件,往default写东西是没问题的)
另外,我也愿意听听其他配置库的建议,但它们必须是内置的(我不想通过pip安装它们)
3 个回答
我觉得最简单的方法就是这个...
from configparser import ConfigParser
config_parser = ConfigParser()
config_parser.default_section = "default"
3.7版本的更新
我不确定这是否一直都是这样,但我现在在使用3.7版本的configparser时,看到了一些相关的内容。根据我目前的理解,最简单的方法是在configparser的初始化时设置你的默认部分名称。下面的例子中要注意字母的大小写。
示例:
config = configparser.ConfigParser(default_section='default')
然后你可以简单地向默认部分添加内容:
config.set('default', 'option', 'value')
或者
config['default'] = {'option1':'value1', 'option2':'value2'}
注意: 上面提到的第二种方法(字典类型的方法)会覆盖该部分中已经存在的任何内容,包括部分名称的大小写,如果你不小心的话。为了避免这种情况,保持命名的一致性是很重要的。
这里有个变通的方法(暂时设置 ConfigParser.DEFAULTSECT
):
import ConfigParser
import sys
config = ConfigParser.ConfigParser()
config.set(ConfigParser.DEFAULTSECT, 'name', 'value')
ORIG_DEFAULTSECT = ConfigParser.DEFAULTSECT # <---
ConfigParser.DEFAULTSECT = 'default'
try:
config.write(sys.stdout)
finally:
ConfigParser.DEFAULTSECT = ORIG_DEFAULTSECT # <---
另一种方法:把一个包含你想要的部分名称的 StringIO 传给 readfp
import ConfigParser
import sys
from StringIO import StringIO
config = ConfigParser.ConfigParser()
config.readfp(StringIO('[default]')) # <----
config.set('default', 'name', 'value')
config.write(sys.stdout)