我正在使用ini文件,默认部分名为'default'而不是'DEFAULT'。 Pythons ConfigParser
接缝处理这些部分没问题。但是,无论出于何种原因,它们都不允许您添加“默认”部分或写入它。
在代码中,它们已经硬编码,您无法创建任何不区分大小写的“DEFAULT”版本的部分。
所以,如果我不能添加“默认”部分,我该怎么写呢?该规范称您写入'DEFAULT',因为该部分始终存在。但是,如何写入'default'?
我希望与文件的编写方式保持一致,因此我希望默认部分以小写而不是全部大写。
如果文件还不存在,我想添加[default]部分。写入“默认”部分会给我一个ValueError: Invalid section name: default
(注意:当我使用已经正确格式化的文件时,写入默认设置可以正常工作)
另外,我愿意听取我可以使用的其他配置库的建议。但他们一定不能成为第三方(我不应该小心安装它们)
答案 0 :(得分:2)
这是一种解决方法(暂时设置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)
答案 1 :(得分:1)
更新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方法)将覆盖此节中已经存在的所有内容,如果不小心的话,包括节名的大小写。为避免这种情况,请保持命名惯例一致。