Writing comments to files with ConfigParser

大城市里の小女人 提交于 2019-11-30 08:07:44
martin.preinfalk

You can use the allow_no_value option if you have Version >= 2.7

This snippet:

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')

will create an ini file like this:

[default_settings]
; comment here
test = 1

You can create variable that starts by # or ; character:

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

created conf file is

    [default_settings]
    ; comment here = 
    test = 1

ConfigParser.read function won't parse first value

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

gives

[('test','1')]

Update for 3.7

I've been dealing with configparser lately and came across this post. Figured I'd update it with information relevant to 3.7.

Example 1:

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

Example 2:

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

Example 3: If you want to keep your letter case unchanged (default is to convert all option:value pairs to lowercase)

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

Where "SECTION" is the case-sensitive section name you want the comment added to. Using "None" (no quotes) instead of an empty string ('') will allow you to set the comment without leaving a trailing "=".

You could also use ConfigUpdater. It has many more convenience options to update configuration files in a minimal invasive way.

You would basically do:

from configupdater import ConfigUpdater

updater = ConfigUpdater()
updater.add_section('DEFAULT')
updater.set('DEFAULT', 'test', 1)
updater['DEFAULT']['test'].add_before.comment('test comment', comment_prefix=';')
with open('./config.ini', 'w') as f:
    updater.write(f)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!