我想将以下.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
格式
答案 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']}