使用ConfigParser向文件写入注释
如何在特定部分给文件写注释呢?
假设我有:
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