写入小写的“默认”部分ConfigParser

时间:2014-09-02 17:01:32

标签: python configparser

我正在使用ini文件,默认部分名为'default'而不是'DEFAULT'。 Pythons ConfigParser接缝处理这些部分没问题。但是,无论出于何种原因,它们都不允许您添加“默认”部分或写入它。 在代码中,它们已经硬编码,您无法创建任何不区分大小写的“DEFAULT”版本的部分。

所以,如果我不能添加“默认”部分,我该怎么写呢?该规范称您写入'DEFAULT',因为该部分始终存在。但是,如何写入'default'?

我希望与文件的编写方式保持一致,因此我希望默认部分以小写而不是全部大写。

如果文件还不存在,我想添加[default]部分。写入“默认”部分会给我一个ValueError: Invalid section name: default

(注意:当我使用已经正确格式化的文件时,写入默认设置可以正常工作)

另外,我愿意听取我可以使用的其他配置库的建议。但他们一定不能成为第三方(我不应该小心安装它们)

2 个答案:

答案 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方法)将覆盖此节中已经存在的所有内容,如果不小心的话,包括节名的大小写。为避免这种情况,请保持命名惯例一致。