2013-05-29 2 views
0

파이썬 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) 

을!

답변

0

즉시 사용 가능합니다. 아니요, ConfigParser으로는이 작업을 수행 할 수 없습니다. 그러나 ConfigParser.ConfigParser이고 클래스는 무시할 수 있습니다 :). 이 동작을 구현하기 위해 ConfigParser.get()을 무시하거나 .getformula() 메서드를 추가하는 class FormulaConfigParser(ConfigParser)을 쓸 수없는 이유는 없습니다.

+0

정말 고마워. 래퍼 클래스를 만들고 getFormula 메서드를 추가했습니다. 그것은 내가 원하는 것을했다. :) 다음은 코드입니다 (형식화에 대해 미안합니다. 주석의 형식을 지정하는 방법을 모르겠다.) : class myConfigParser (object) : def __init __ (self, origobj) : self.myobj = origobj def getFormula (자기, 섹션, 옵션) : retString = self.get (섹션 옵션) 반환 평가 (retString) 데프 __getattr (자기, ATTR) __ : 반환 getattr (self.myobj는, ATTR)' – Crystal

+0

꽤 좋아 보인다, 필자의 유일한 제안은 설정 파일에서'eval'ing 코드를 작성하는 것이 위험 할 수 있지만 실제로이 코드의 사용 방법에 달려 있습니다. 당신이 사용하는 것이면, 아마 상관 없습니다. 다른 사람들이 사용할 수 있도록 배포 할 예정이라면'eval'하기 전에'retString'에 약간의 검증을 추가하는 것이 좋습니다. –

관련 문제