Python 从配置文件中检索多个值

Python 从配置文件中检索多个值,python,Python,我有一个配置如下的文件: settingA=3 settingB=6 settingC=12 settingD=5 #Item 1 item1_A=0 item1_B=2 item1_C=8 #Item 2 item2_A=1 item2_B=1 item2_C=9 #Item 3 item3_A=1 item3_B=4 item3_C=3 我想提取一些变量来执行一些计算。 如果设置了itemN的A变量,那么我想在计算中包括itemN的变量B和C。 给定上面的示例配置文件,我要计算的输出是:

我有一个配置如下的文件:

settingA=3
settingB=6
settingC=12
settingD=5
#Item 1
item1_A=0
item1_B=2
item1_C=8
#Item 2
item2_A=1
item2_B=1
item2_C=9
#Item 3
item3_A=1
item3_B=4
item3_C=3
我想提取一些变量来执行一些计算。 如果设置了itemN的A变量,那么我想在计算中包括itemN的变量B和C。 给定上面的示例配置文件,我要计算的输出是:

settingA + settingB * ((item2_B * item2_C) + (item3_B * item3_C))
3 + 6 * ((1 * 9) + (4 * 3))
=129
我已经尝试将整个文件加载到字典中,但是我不知道如何正确地遍历字典值。 我可以得到我想要的输出,但我已经硬编码了每个设置/项目变量:

def get_pair(line):
    key, sep, value = line.strip().partition("=")
    return key, value

with open("config.txt") as fd:    
    d = dict(get_pair(line) for line in fd)

settingA = int(d.get("settingA"))
settingB = int(d.get("settingB"))

item1_A = int(d.get("item1_A"))
item1_B = int(d.get("item1_B"))
item1_C = int(d.get("item1_C"))

item2_A = int(d.get("item2_A"))
item2_B = int(d.get("item2_B"))
item2_C = int(d.get("item2_C"))

item3_A = int(d.get("item3_A"))
item3_B = int(d.get("item3_B"))
item3_C = int(d.get("item3_C"))

item1_total = 0
if(item1_A == 1):
    item1_total = item1_B * item1_C

item2_total = 0
if(item2_A == 1):
    item2_total = item2_B * item2_C

item3_total = 0
if(item3_A == 1):
    item3_total = item3_B * item3_C

total = settingA + settingB * (item1_total + item2_total + item3_total)
print(total)

我正在尝试将硬编码的解决方案转换为通用解决方案,其中可以有任意数量的项目供我迭代。

正如我在评论中提到的,通过更改配置,这是一个非常简单的解决方案。例如,JSON:

# contents of config.json
{
    "settings": [3, 6, 12, 5],
    "items": [
        {"A": 0, "B": 2, "C": 8},
        {"A": 1, "B": 1, "C": 9},
        {"A": 1, "B": 4, "C": 3}
    ]
}
然后可以在Python中加载json

import json

with open('path/to/config.json') as f:
    config = json.load(f)

total = config['settings'][0]

scalar = sum(item['B'] * item['C'] for item in config['items'] if item['A'])
total += config['settings'][1] * scalar

您的评论似乎关闭了更改配置文件的大门,因此您的新任务应该是将现有的错误配置解析为更有用的东西,如上面的JSON。完成后,上述方法应能很好地发挥作用。

请添加一个预期输出的示例。请分享您尝试过的内容以及您遇到的问题。在该示例中,最后三行不是以item2开头吗?使用预期输出和更正的item2变量进行更新。请在您的问题中添加一个。如果看不到你的代码,或者至少是MCVE,在这里很难满足你的需要。谢谢。在JSON中,配置将更容易工作,但这是一个遗留的嵌入式产品-下一个版本肯定是JSON。我还有其他计划在设备外部使用配置,所以编写一个解析来转换听起来是值得的一步。