我正在使用ini文件,默认部分名为'default'而不是'DEFAULT'。 Pythons ConfigParser
接缝处理这些部分没问题。但是,无论出于何种原因,它们都不允许您添加“默认”部分或写入它。在代码中,它们已经硬编码,您无法创建任何不区分大小写的“DEFAULT”版本的部分。
所以,如果我不能添加“默认”部分,我该怎么写?该规范称您写入'DEFAULT',因为该部分始终存在。但是,如何写入'default'?
我希望与文件的编写方式保持一致,因此我希望默认部分以小写而不是全部大写。
如果文件还不存在,我想添加[default]部分。写入“默认”部分给了我一个ValueError: Invalid section name: default
(注意:当我使用已经正确格式化的文件时,写入默认设置工作正常)
另外,我愿意听取我可以使用的其他配置库的建议。但他们不能是第三方(我不应该pip安装它们)
这是一个解决方法(暂时设置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)
更新3.7
我不知道是否一直如此,但我目前正在处理3.7中的configparser并且遇到过这篇文章。在撰写本文时,最简单的方法是在configparser的__init__期间设置默认的部分名称。请密切注意以下示例中的字符大小写。
例:
config = configparser.ConfigParser(default_section='default')
然后,您只需添加到默认部分:
config.set('default', 'option', 'value')
要么
config['default'] = {'option1':'value1', 'option2':'value2'}
注意:上面的第二种方法(dict-type方法)将覆盖该部分中已存在的任何内容,包括部分名称情况,如果您不小心的话。在命名约定上保持一致以避免这种情况。