Python | Reading .ini Configuration Files

This article aims to read configuration files written in the common .ini configuration file format. The configparser module can be used to read configuration files.

Code #1 : Configuration File

filter_none

edit
close

play_arrow

link
brightness_4
code

abc.ini
  
; Sample configuration file
[installation]
library = %(prefix)s/lib
include = %(prefix)s/include
bin = %(prefix)s/bin
prefix = /usr/local
  
# Setting related to debug configuration
[debug]
pid-file = /tmp/spam.pid
show_warnings = False
log_errors = true
[server]
nworkers: 32
port: 8080
root = /www/root
signature:

chevron_right


Code #2 : Reading the file and extracting values.

filter_none

edit
close

play_arrow

link
brightness_4
code

from configparser import ConfigParser
  
configur = ConfigParser()
print (configur.read('config.ini'))
  
print ("Sections : ", configur.sections())
print ("Installation Library : ", configur.get('installation','library'))
print ("Log Errors debugged ? : ", configur.getboolean('debug','log_errors'))
print ("Port Server : ", configur.getint('server','port'))
print ("Worker Server : ", configur.getint('server','nworkers'))
  

chevron_right


Output :

['config.ini']
Sections : ['installation', 'debug', 'server']
Installation Library : '/usr/local/lib'
Log Errors debugged ? : True
Port Server : 8080
Worker Server : 32

One can also modify the configuration and write it back to a file using the cfg.write() method.

Code #3 :

filter_none

edit
close

play_arrow

link
brightness_4
code

configur.set('server','port','9000')
configur.set('debug','log_errors','False')
  
import sys
configur.write(sys.stdout)

chevron_right


Output :

[installation]
library = %(prefix)s/lib
include = %(prefix)s/include
bin = %(prefix)s/bin
prefix = /usr/local

[debug]
log_errors = False
show_warnings = False

[server]
port = 9000
nworkers = 32
pid-file = /tmp/spam.pid
root = /www/root
  • Configuration files are well suited to specify configuration data to your program. Within each config file, values are grouped into different sections (e.g., “installation”, “debug” and “server”).
  • Each section then has a specific value for various variables in that section. For the same purpose, there are some prominent differences between a config file and using a Python source file.
  • First, the syntax is much more permissive and “sloppy.”

Names used in a config file are also assumed to be case-insensitive as shown in the code below –

filter_none

edit
close

play_arrow

link
brightness_4
code

configur.get('installation','PREFIX')
  
configur.get('installation','prefix')

chevron_right


Output :

'/usr/local'
'/usr/local'

When parsing values, methods such as getboolean() look for any reasonable value. For example, these are all equivalent.

log_errors = true
log_errors = TRUE
log_errors = Yes
log_errors = 1

The most noteworthy contrast between a config record and Python code is that, in contrast to scripts, configuration files are not executed in a top-down way. Rather, the file is read completely. On the off chance that variable substitutions are made, they are done later after the fact. For instance, it doesn’t make a difference that the prefix variable is allocated after different variables that happen to utilize it.

[installation]
library = %(prefix)s/lib
include = %(prefix)s/include
bin = %(prefix)s/bin
prefix = /usr/local

Multiple configuration files can be read together and their results can be merged into a single configuration using ConfigParser, which makes it so special to use.

Example – A user made their own configuration file that looks as.

; ~/.config.ini
[installation]
prefix = /Users/beazley/test
[debug]
log_errors = False

This file can be merged with the previous configuration by reading it separately

Code #4 :

filter_none

edit
close

play_arrow

link
brightness_4
code

import os
  
# Previously read configuration
print (configur.get('installation', 'prefix'))
  
# Merge in user-specific configuration
print (configur.read(os.path.expanduser('~/.config.ini')))
print (configur.get('installation', 'prefix'))
print (configur.get('installation', 'library'))
  
print (configur.getboolean('debug', 'log_errors'))

chevron_right


Output :

'/usr/local' 
['/Users/HP/.config.ini']
'/Users/HP/test'
'/Users/HP/test/lib'
False


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.