파이썬 2.7.5에서 ConfigParser를 사용하여 구성 파일을 구문 분석합니다. 일부 값을 보간하고 싶지만 문자열 대신 정수로 처리합니다 (예 : 계산). 이것이 가능한가?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)
그러나 내가 읽은 모든 것이 당신은 단지 문자열을 보간 수 있다고 보인다. 내가 놓친 게 있니?
편집 : 폴 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)
을!
정말 고마워. 래퍼 클래스를 만들고 getFormula 메서드를 추가했습니다. 그것은 내가 원하는 것을했다. :) 다음은 코드입니다 (형식화에 대해 미안합니다. 주석의 형식을 지정하는 방법을 모르겠다.) : class myConfigParser (object) : def __init __ (self, origobj) : self.myobj = origobj def getFormula (자기, 섹션, 옵션) : retString = self.get (섹션 옵션) 반환 평가 (retString) 데프 __getattr (자기, ATTR) __ : 반환 getattr (self.myobj는, ATTR)' – Crystal
꽤 좋아 보인다, 필자의 유일한 제안은 설정 파일에서'eval'ing 코드를 작성하는 것이 위험 할 수 있지만 실제로이 코드의 사용 방법에 달려 있습니다. 당신이 사용하는 것이면, 아마 상관 없습니다. 다른 사람들이 사용할 수 있도록 배포 할 예정이라면'eval'하기 전에'retString'에 약간의 검증을 추가하는 것이 좋습니다. –