我正在查看Python 3.6 documentation所说的
默认情况下,节名称区分大小写,但键不是[1]。
对于脚注,它说
[1](1,2,3,4,5,6,7,8,9,10)配置解析器允许大量定制。如果您有兴趣更改脚注引用所概述的行为,请参阅自定义分析器行为部分。
所以我看看" 14.2.7。自定义分析器行为"但我找不到如何使区段不区分大小写的描述。
我想要一个这样的部分:
[SETTINGS]
...
可以像config['section']
这样访问,但目前我收到了错误消息。这是我想要应用的配置解析器的唯一更改。
答案 0 :(得分:2)
你可以在Python 3.x中通过传递ConfigParser
documentation中描述的可选dict_type=
关键字参数来相当容易地做到这一点 - 在这种情况下我们希望类型是一个案例 - 不敏感的有序dictionary
。
不幸的是,标准库中没有一个,也没有我所知道的锥形实现...所以我拼凑了一个用作例子。它没有经过严格的测试,但运作良好,足以说明一般的想法。
注意:为了进行测试,我使用了以下simple.ini
文件(我从pymotw刷过):
# This is a simple example with comments.
[bug_tracker]
url = http://localhost:8080/bugs/
username = dhellmann
; You should not store passwords in plain text
; configuration files.
password = SECRET
这是一个演示,显示使用一个来做所需的事情:
import collections
from configparser import ConfigParser
class CaseInsensitiveDict(collections.MutableMapping):
""" Ordered case insensitive mutable mapping class. """
def __init__(self, *args, **kwargs):
self._d = collections.OrderedDict(*args, **kwargs)
self._convert_keys()
def _convert_keys(self):
for k in list(self._d.keys()):
v = self._d.pop(k)
self._d.__setitem__(k, v)
def __len__(self):
return len(self._d)
def __iter__(self):
return iter(self._d)
def __setitem__(self, k, v):
self._d[k.lower()] = v
def __getitem__(self, k):
return self._d[k.lower()]
def __delitem__(self, k):
del self._d[k.lower()]
parser = ConfigParser(dict_type=CaseInsensitiveDict)
parser.read('simple.ini')
print(parser.get('bug_tracker', 'url')) # -> http://localhost:8080/bugs/
print(parser.get('Bug_tracker', 'url')) # -> http://localhost:8080/bugs/