有没有办法使用ConfigParser来评估公式而不是插入字符串?

时间:2013-05-29 15:54:06

标签: python configparser

我在python 2.7.5中使用ConfigParser来解析配置文件。我想插入一些值,但将它们视为整数而不是字符串(即,进行计算)。这可能吗?

以下是我目前的做法:

global constantValues

config = ConfigParser.ConfigParser()

# use ConfigParser to get values
config.read("filename")

for section in config.sections():
    if (section == "INT"):
        for option in config.options(section):
            constantValues[option] = config.getint(section, option)
    elif (section == "BOOL"):
        for option in config.options(section):
            constantValues[option] = config.getboolean(section, option)
    elif (section == "FLOAT"):
        for option in config.options(section):
            constantValues[option] = config.getfloat(section, option)
    else:
        for option in config.options(section):
            constantValues[option] = config.get(section, option)

constantValues["samp_per_clk"] = int (constantValues["fs"] / constantValues["sys_clk"])
constantValues["samp_per_trig"] = float(constantValues["fs"] / constantValues["sys_clk"] * constantValues["clks_per_enc"])

我想在配置文件中计算“samp_per_clk”和“samp_per_trig”,然后使用configparser读取它。像这样:

samp_per_clk: %(fs) / %(sys_clk)

但我读过的所有内容似乎都说你只能用字符串进行插值。我错过了什么吗?

编辑:基于Paul Woolcock在下面的回答以及this question的答案,我添加了以下包装类:

class myConfigParser(object):
    def __init__(self, origobj):
        self.myobj = origobj
    def getFormula(self, section, option):
        retString = self.get(section, option)
        return eval(retString)
    def __getattr__(self, attr):
        return getattr(self.myobj, attr)

这就是诀窍!!

1 个答案:

答案 0 :(得分:0)

开箱即用,不,您不能使用ConfigParser执行此操作。但是,ConfigParser.ConfigParser 只是一个类,而且类可以重写:)。我认为没有理由不写class FormulaConfigParser(ConfigParser)覆盖ConfigParser.get()来实现此行为,或者可能添加.getformula()方法?