Question

I would like to use the following .ini file with ConfigParser.

[Site1]
192.168.1.0/24
192.168.2.0/24

[Site2]
192.168.3.0/24
192.168.4.0/24

Unfortunately a call to read() dumps the following error:

import ConfigParser
c = ConfigParser.ConfigParser()
c.read("test.ini")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\ConfigParser.py", line 305, in read
    self._read(fp, filename)
  File "C:\Python27\lib\ConfigParser.py", line 546, in _read
    raise e
ConfigParser.ParsingError: File contains parsing errors: test.ini
        [line  2]: '192.168.1.0/24\n'
        [line  3]: '192.168.2.0/24\n'
        [line  6]: '192.168.3.0/24\n'
        [line  7]: '192.168.4.0/24\n'

My understanding is that the expected format is key = value (a value is required).

My questions:

  • is ConfigParser usable for such files?
  • if not: is there a good alternative to parse similar files?

I can reformat the config file but would like to keep a simple, raw list of entries per section -- as opposed to faking the key = value format with something like range1 = 192.168.1.0/24

Was it helpful?

Solution

Use allow_no_value parameter:

import ConfigParser
c = ConfigParser.ConfigParser(allow_no_value=True)
c.read("test.ini")

According to ConfigParser.RawConfigParser (base class of ConfigParser):

When allow_no_value is true (default: False), options without values are accepted; the value presented for these is None.

NOTE: available in Python 2.7+, 3.2+

OTHER TIPS

you need to set the allow_no_value parameter to True

import ConfigParser
c = ConfigParser.ConfigParser(allow_no_value=True)
c.read("test.ini")

Also check out ConfigObj as an alternative.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top