# iniparse

Better INI parser for Python

Introduction

`iniparse` is a INI parser for Python which is:

- Compatible with `ConfigParser`: Backward compatible implementations of `ConfigParser`, `RawConfigParser`, and `SafeConfigParser` are included that are API-compatible with the Python standard library.
- Preserves structure of INI files: Order of sections & options, indentation, comments, and blank lines are preserved as far as possible when data is updated.
- More convenient: Values can be accessed using dotted notation (`cfg.user.name`), or using container syntax (`cfg['user']['name']`).
- Extensible: It is possible to add other configuration formats, and to convert between different formats (as long as the data models are compatible).

It is very useful for config files that are updated both by users and by programs, since it is very disorienting for a user to have her config file completely rearranged whenever a program changes it. iniparse also allows making the order of entries in a config file significant, which is desirable in applications like image galleries.

Website: http://code.google.com/p/iniparse/

Examples
New API:

- Open an INI file:

      >>> from iniparse import INIConfig
      >>> cfg = INIConfig(file('options.ini'))

- Access/Modify data:

      >>> print cfg.playlist.expand_playlist
      True
      >>> print cfg.ui.width
      150
      >>> cfg.ui.width = 200
      >>> print cfg['ui']['width']
      200

- Print data:

      >>> print cfg
      [playlist]
      expand_playlist = True

      [ui]
      display_clock = True
      display_qlength = True
      width = 200

Backward Compatible API:

- The entire ConfigParser API is supported. This is just a brief example:

      >>> from iniparse import ConfigParser
      >>> cfgpr = ConfigParser()
      >>> cfgpr.read('options.ini')
      >>> print cfgpr.get('ui', 'width')
      150
      >>> cfgpr.set('ui', 'width', 175)

- The new API can also be accessed via backward-compatible objects:

      >>> print cfgpr.data.playlist.expand_playlist
      True
      >>> cfgpr.data.ui.width = 200
      >>> print cfgpr.data.ui.width
      200

A non-INI example:

- A simple dotted format is also implemented:

      >>> from iniparse import BasicConfig
      >>> n = BasicConfig()
      >>> n.x = 7
      >>> n.name.first = 'paramjit'
      >>> n.name.last = 'oberoi'
      >>> print n.x
      7
      >>> print n.name.first
      'paramjit'
      >>> print n
      name.first = paramjit
      name.last = oberoi
      x = 7

- Convert to INI:

      >>> from iniparse import INIConfig
      >>> i = INIConfig()
      >>> del n.x               # since INI doesn't support top-level values
      >>> i.import_config(n)
      >>> print i
      [name]
      first = paramjit
      last = oberoi