Python ConfigParser中不区分大小写的部分
我在看上面写着什么 默认情况下,节名称区分大小写,但键不区分[1] 它的脚注是这样写的 [1] (1,2,3,4,5,6,7,8,9,10)配置解析器允许大量定制。如果您有兴趣更改脚注参考中概述的行为,请参阅定制解析器行为部分 因此,我查看了“14.2.7.自定义解析器行为”,但找不到如何使节不区分大小写的描述 我想要一个这样的部分:Python ConfigParser中不区分大小写的部分,python,configparser,Python,Configparser,我在看上面写着什么 默认情况下,节名称区分大小写,但键不区分[1] 它的脚注是这样写的 [1] (1,2,3,4,5,6,7,8,9,10)配置解析器允许大量定制。如果您有兴趣更改脚注参考中概述的行为,请参阅定制解析器行为部分 因此,我查看了“14.2.7.自定义解析器行为”,但找不到如何使节不区分大小写的描述 我想要一个这样的部分: [SETTINGS] ... 可以像这样访问config['section'],但目前我遇到了一个错误。这是我想要应用的配置解析器的唯一更改。在Python3.
[SETTINGS]
...
可以像这样访问
config['section']
,但目前我遇到了一个错误。这是我想要应用的配置解析器的唯一更改。在Python3.x中,您可以相当轻松地完成这一操作,方法是将一些内容作为-中描述的可选dict\u type=
关键字参数传递,在本例中,我们希望该类型是不区分大小写的有序字典
不幸的是,标准库中并没有一个,也并没有我所知道的圆锥形实现……所以我拼凑了一个作为示例。它还没有经过严格的测试,但工作良好,足以说明总体思路
注意:在测试中,我使用了以下simple.ini
文件(我从中刷卡):
#这是一个带有注释的简单示例。
[臭虫追踪者]
url=http://localhost:8080/bugs/
用户名=dhellmann
; 不应以纯文本形式存储密码
; 配置文件。
密码=秘密
下面是一个演示,演示如何使用一个来执行所需操作:
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/
[SETTINGS]
不是“部分中的键”,而是一个部分。所以可能这个报价不适用。@Lutz Horn,对不起,我的报价错了。我已经更新了这个问题。可能是个傻瓜,不要看得太近:不管怎样,你可能想覆盖这个属性。问题是,这是个傻瓜。除非有人有更好的答案,否则我将使用那边提出的答案。尽管很明显ConfigParser只希望其中一个能够更改匹配,而不是修改它。我接受了这个答案,因为它解决了我的问题,尽管我相信它也影响到不仅仅是节头;senevoldsen:是的,它也使选项名不区分大小写,但正如您所指出的,这是默认行为……不幸的是,这不能通过提供自定义optionxform()的常用技术来覆盖
使用建议的dict\u类型时的功能
。用于每个节的选项名称的ping。cont…cont此外,在查看了configparser
之后,我认为没有一种方法可以使节名不区分大小写,但选项名不区分大小写,因为dict_type
既用于节名的映射,也用于选项名到值的映射。