我只是想知道。是否有机会在* .ini文件中创建部分以仅存储没有键的值?我要在localhost和其他服务器中存储已使用端口的列表,我的列表如下所示:
[servers]
localhost:1111
localhost:2222
localhost:3333
someserver:2222
someserver:3333
现在,python将服务器名称视为键,将端口视为值。但最糟糕的是打电话
print config.items('servers')
只返回我:
localhost:3333
someserver:3333
这是错误的,但我可以通过替换:在配置中处理它,但仍然需要键值。知道怎么做对吗?
答案 0 :(得分:1)
你有选项allow_no_value,但你不能避免“:”作为值分隔符,这是在ConfigParser.py:
OPTCRE = re.compile(
r'(?P<option>[^:=\s][^:=]*)' # very permissive!
r'\s*(?P<vi>[:=])\s*' # any number of space/tab,
# followed by separator
# (either : or =), followed
# by any # space/tab
r'(?P<value>.*)$' # everything up to eol
)
我想到的唯一解决方案是:
[servers]
s1 = localhost:1111
s2 = localhost:2222
s3 = localhost:3333
s4 = someserver:2222
s5 = someserver:3333
答案 1 :(得分:1)
您可以将服务器存储在逗号分隔列表中,
[servers]
server_list = localhost:1111, localhost:2222, localhost:3333, someserver:2222, someserver:3333
将其读入类似
的列表中from ConfigParser import ConfigParser
cp = ConfigParser()
cp.read('derp.config')
print cp.items('servers')[0][1].split(', ')
输出
['localhost:1111', 'localhost:2222', 'localhost:3333', 'someserver:2222', 'someserver:3333']
答案 2 :(得分:0)
在我看来,使用xml而不是ini会更好...这可以替代你吗?
答案 3 :(得分:0)
我认为你不能让ConfigParser
将冒号视为键/值分隔符。因此,如果您使用冒号,主机名将被解释为键,这对您不起作用,因为它们不是唯一的。因此,您可能需要将冒号更改为其他内容。那么你的参赛作品就是独特的。 ConfigParser
支持没有值的键:
In [1]: from ConfigParser import ConfigParser
In [2]: cp = ConfigParser(allow_no_value=True)
In [3]: cp.read('foo.conf')
Out[3]: ['foo.conf']
In [4]: cp.items('servers')
Out[4]:
[('localhost;1111', None),
('localhost;2222', None),
('localhost;3333', None),
('someserver;2222', None),
('someserver;3333', None)]
另一种选择是为每一行添加一个唯一的ID,并用冒号分隔它。其余的将成为价值:
In [1]: from ConfigParser import ConfigParser
In [2]: cp = ConfigParser()
In [3]: cp.read('foo.conf')
Out[3]: ['foo.conf']
In [4]: cp.items('servers')
Out[4]:
[('1', 'localhost:1111'),
('2', 'localhost:2222'),
('3', 'localhost:3333'),
('4', 'someserver:2222'),
('5', 'someserver:3333')]
答案 4 :(得分:0)
如果可以,请更改以下格式:
[servers]
localhost:1111,2222,3333
someserver:4444,5555,6666
在阅读时,请将密钥作为服务器名称读取,并将文件中的值作为列表从字符串转换为value.split(&#39;,&#39;)。您可以轻松检查端口。