Update INI file without removing comments

configparser, ini, python

Solution

The reason that comments in config files are wiped when writing back is that the write method didn't take care of comments at all. It just writes key/value pairs.

The easiest way to bypass this is to init configparser object with a customized comment prefix and `allow_no_value = True`. Then, if we want to keep the default "#" and ";" as comment lines in the file, we can specify another comment prefix, like "/" with `comment_prefixes='/'`. You can read this section of the configparser documentation for further information.

i.e., to keep comments, you have to trick configparser into believing that lines starting with "#" are not comments, but they are keys without a value. Interesting :)

# set comment_prefixes to a string which you will not use in the config file
config = configparser.ConfigParser(comment_prefixes='/', allow_no_value=True)
config.read_file(open('example.ini'))
...
config.write(open('example.ini', 'w'))

Problem

Consider the following INI file: ``` [TestSettings] # First comment goes here environment = test [Browser] # Second comment goes here browser = chrome chromedriver = default ... ``` I'm using Python 2.7 to update the ini file: ``` config = ConfigParser.ConfigParser() config.read(path_to_ini) config.set('TestSettings','environment',r'some_other_value') with open(path_to_ini, 'wb') as configfile: config.write(configfile) ``` How can I update the INI file without removing the comments. The INI file is updated but the comments are removed. ``` [TestSettings] environment = some_other_value [Browser] browser = chrome chromedriver = default ```

Original source

Related problems