Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Update INI file without removing comments

Tags:

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 
like image 353
sarbo Avatar asked Jan 31 '14 09:01

sarbo


People also ask

Can INI files have comments?

Comments in the INI must start with a semicolon (";") or a hash character ("#"), and run to the end of the line. A comment can be a line of its own, or it may follow a key/value pair (the "#" character and trailing comments are extensions of minIni).

How do I update my config INI file?

Open the Backup Manager installation folder. Find the config. ini file inside (see the table below for the exact file path on each operating system) and open as an Administrator. Edit the settings as needed, save the changes and close the file.

Are INI files case sensitive?

Case sensitivitySection and property names are case insensitive.


1 Answers

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. If we want to keep the default "#" and ";" comment lines in the file, we can use comment_prefixes='/'.

i.e., to keep comments, you have to trick configparser into believing this is not a comment, this line is a key 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')) 
like image 100
wang yi Avatar answered Sep 28 '22 09:09

wang yi