使用ConfigParser向文件写入注释

44 投票
6 回答
39773 浏览
提问于 2025-04-16 21:04

如何在特定部分给文件写注释呢?

假设我有:

import ConfigParser
with open('./config.ini', 'w') as f:
    conf = ConfigParser.ConfigParser()
    conf.set('DEFAULT', 'test', 1)
    conf.write(f)

那么我会得到这个文件:

[DEFAULT]
test = 1

但是我怎么才能在 [DEFAULT] 部分里面加注释呢,比如:

[DEFAULT]
; test comment
test = 1

我知道我可以通过以下方式把代码写入文件:

import ConfigParser
with open('./config.ini', 'w') as f:
    conf = ConfigParser.ConfigParser()
    conf.set('DEFAULT', 'test', 1)
    conf.write(f)
    f.write('; test comment') # but this gets printed after the section key-value pairs

使用 ConfigParser 这样做有可能吗?我不想尝试其他模块,因为我希望我的程序尽量保持“原汁原味”。

6 个回答

5

你可以创建一个以 # 或 ; 开头的变量:

conf.set('default_settings', '; comment here', '')
conf.set('default_settings', 'test', 1)

创建的配置文件是

    [default_settings]
    ; comment here = 
    test = 1

ConfigParser.read 函数不会解析第一个值

config = ConfigParser.ConfigParser()
config.read('config.ini')
print config.items('default_settings')

结果是

[('test','1')]
9

关于3.7的更新

最近我在处理configparser的时候,看到了一篇帖子。于是我决定更新一下,加入一些和3.7版本相关的信息。

示例1:

config = configparser.ConfigParser(allow_no_value=True)
config.set('SECTION', '; This is a comment.', None)

示例2:

config = configparser.ConfigParser(allow_no_value=True)
config['SECTION'] = {'; This is a comment':None, 'Option':'Value')

示例3:如果你想保持字母的大小写不变(默认情况下,所有的选项:值对都会被转换成小写)

config = configparser.ConfigParser(allow_no_value=True)
config.optionxform = str
config.set('SECTION', '; This Comment Will Keep Its Original Case', None)

这里的“SECTION”是你想要添加注释的区块名称,区分大小写。如果用“None”(不加引号)代替空字符串(''),就可以在不留下多余的“=”的情况下设置注释。

39

如果你的版本是2.7或更高,可以使用allow_no_value这个选项。

下面这段代码:

import ConfigParser

config = ConfigParser.ConfigParser(allow_no_value=True)
config.add_section('default_settings')
config.set('default_settings', '; comment here')
config.set('default_settings', 'test', 1)
with open('config.ini', 'w') as fp:
    config.write(fp)


config = ConfigParser.ConfigParser(allow_no_value=True)
config.read('config.ini')
print config.items('default_settings')

会生成一个这样的ini文件:

[default_settings]
; comment here
test = 1

撰写回答