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

问题描述 投票:2回答:2

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

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

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

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

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

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

python configparser
2个回答
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
投票

更新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方法)将覆盖该部分中已存在的任何内容,包括部分名称情况,如果您不小心的话。在命名约定上保持一致以避免这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.