Python:如何只用键读取配置文件(没有值)

时间:2013-11-14 07:48:00

标签: python parsing configuration-files

我想将以下.ini文件与ConfigParser一起使用。

[Site1]
192.168.1.0/24
192.168.2.0/24

[Site2]
192.168.3.0/24
192.168.4.0/24

不幸的是,对read()的调用会转储以下错误:

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'

我的理解是预期格式为key = value(需要value)。

我的问题:

  • ConfigParser可用于此类文件吗?
  • 如果没有:是否有一个很好的替代方法来解析类似的文件?

我可以重新格式化配置文件,但是希望每个部分保留一个简单的原始条目列表 - 而不是像key = value

那样伪造range1 = 192.168.1.0/24格式

3 个答案:

答案 0 :(得分:8)

使用allow_no_value参数:

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

根据ConfigParser.RawConfigParser(ConfigParser的基类):

  

allow_no_value为真时(默认值:错误),没有值的选项   被接受;为这些提供的值是

注意:适用于Python 2.7 +,3.2 +

答案 1 :(得分:-1)

您需要将allow_no_value参数设置为True

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

另请查看ConfigObj作为替代方案。

答案 2 :(得分:-3)

您的ini文件无效。您可以使用JSON样式格式:

{
    "site1": ["192.168.1.0/24", "192.168.2.0/24"],
    "site2": ["192.168.3.0/24", "192.168.4.0/24"]
}

然后使用python的json库。

>>> import json
>>> with open("hello.json") as f:
    ...    foo = f.read()
    ...    a = json.loads(foo)
    ...
>>> a
    {'site2': ['192.168.3.0/24', '192.168.4.0/24'], 'site1': ['192.168.1.0/24', '192.168.2.0/24']}