当前位置: 首页 > 面试题库 >

如何配置一个文件,为相同的键保留多个值?

卓新知
2023-03-14
问题内容

我需要能够使用ConfigParser读取同一键的多个值。配置文件示例:

[test]
foo = value1
foo = value2
xxx = yyy

使用“标准”ConfigParser将有一个foo带有值的键value2。但是我需要解析器读取两个值。

在重复键输入之后,我创建了以下示例代码

from collections import OrderedDict
from ConfigParser import RawConfigParser

class OrderedMultisetDict(OrderedDict):
    def __setitem__(self, key, value):

        try:
            item = self.__getitem__(key)
        except KeyError:
            super(OrderedMultisetDict, self).__setitem__(key, value)
            return

        print "item: ", item, value
        if isinstance(value, list):
            item.extend(value)
        else:
            item.append(value)
        super(OrderedMultisetDict, self).__setitem__(key, item)


config = RawConfigParser(dict_type = OrderedDict)
config.read(["test.cfg"])
print config.get("test",  "foo")
print config.get("test",  "xxx")

config2 = RawConfigParser(dict_type = OrderedMultisetDict)
config2.read(["test.cfg"])
print config2.get("test",  "foo")
print config.get("test",  "xxx")

第一部分(带有config)读入我们的“常规”配置文件,仅保留value2其值foo(覆盖/删除其他值),然后得到以下预期输出:

value2
yyy

第二部分(config2)使用我的方法将多个值附加到列表中,但输出是

['value1', 'value2', 'value1\nvalue2']
['yyy', 'yyy']

如何摆脱重复的价值观?我期望的输出如下:

['value1', 'value2']
yyy

要么

['value1', 'value2']
['yyy']

(我不在乎是否每个值都在列表中…)。任何建议欢迎。


问题答案:

进行少量修改后,我就能实现您想要的:

class MultiOrderedDict(OrderedDict):
    def __setitem__(self, key, value):
        if isinstance(value, list) and key in self:
            self[key].extend(value)
        else:
            super(MultiOrderedDict, self).__setitem__(key, value)
            # super().__setitem__(key, value) in Python 3

config = ConfigParser.RawConfigParser(dict_type=MultiOrderedDict)
config.read(['a.txt'])
print config.get("test",  "foo")
print config.get("test",  "xxx")

输出:

['value1', 'value2']
['yyy']


 类似资料:
  • 有什么方法可以使用两个不同的配置文件在settings.xml文件执行两个不同的构建在不同的服务器上?例如:在我的settings.xml文件中,我有两个配置文件: 现在,我想要一个项目的“test1”配置文件和另一个项目的“test2”,我希望我的pom.xml构建属性从settings.xml配置文件的属性中获取。 如果我将两个概要文件都保存在“activeProfiles”中,那么我的两个项

  • 1-我有一个带有Spring Boot的API,我需要配置两个DBMS(MySQL和Postgres)。 2-对于每个DBMS,我需要配置不同的配置文件。(Dev,Prod) 遵循我的MySQL配置类: 我以为我的出口是: 重要: 当我将配置文件配置为连接到我的MySQL Dev数据库时,我只想连接到它。我想要同样的结果,当它是MySQL的Prod的基础时。 当我将配置文件配置为连接到我的Post

  • 如您所知,您可以使用“主机”文件将主机名映射到IP地址。这非常有用,尤其是在您开发时,因为您可以更改项目1的localhost。 这部分很清楚,但不幸的是,我不知道如何设置它来打开具有相同IP的多个项目。我尝试了一些没有成功的事情,例如: 我查了一些相关的问题,但找不到答案。那么,我能以某种方式完成我想做的事情吗?有什么建议吗?

  • 我在计算一个键的出现次数时遇到了一些问题,同时也保留了几个值。 通常我只会: 它给出了每个关键点的出现次数。 但是,我还希望在计算键的出现次数的同时,保留键每次出现的值。类似这样: 例如:如果键x(1)是一个国家,而x(2)是一个城市,那么我想保留一个国家的所有城市,并知道一个国家有多少个城市。

  • @cucumberoptions(features=“src/test/resources/features/xxxxx/xxxxx.feature”,标签=“@tag1”,胶={“com.xxxx.sfdc.opportunities.stepdefinities”},格式={“pretty”,“html:target/cucumber-reports/cucumber-pretty”,“jso

  • 我有两个具有相同id的MDM配置文件,我想在同一设备上安装来自不同环境的两个不同应用程序。当我启用设备时,它将从设备中删除以前安装的应用程序。启用另一个MDM配置文件时,是否可以保存我已安装的应用程序?