Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ConfigParser中不区分大小写的部分_Python_Configparser - Fatal编程技术网

Python ConfigParser中不区分大小写的部分

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.

我在看上面写着什么

默认情况下,节名称区分大小写,但键不区分[1]

它的脚注是这样写的

[1] (1,2,3,4,5,6,7,8,9,10)配置解析器允许大量定制。如果您有兴趣更改脚注参考中概述的行为,请参阅定制解析器行为部分

因此,我查看了“14.2.7.自定义解析器行为”,但找不到如何使节不区分大小写的描述

我想要一个这样的部分:

[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
既用于节名的映射,也用于选项名到值的映射。