python之自动化生成解析ini文件的Qt类

来源:互联网 发布:病假条淘宝暗语大全 编辑:程序博客网 时间:2024/05/18 02:35

## genQtSetting.py


import os,sys,reimport shutil,stringfrom string import TemplategHearFile = "hcs_setting"gSrcFile = "hcs_setting"gClassName = "HCS_Setting"#[OK]class CObject(object):    def __init__(self):        self._group = ""        self._gList = []        self._gMap = {}        self._gSaveList = ""    def setGroup(self,group):        self._group = group    def addMember(self,key,value):        self._gList.append(key)        self._gMap[key] = value    ###########################################################################    #   Header File.    #   QString getGroupFiled();    ###########################################################################    def toFunc_Def_List(self):        res = ""        for item in self._gList:            tmp = "\t%s get%s%s();\n" % ("QString",self._group.capitalize() ,item.capitalize())            res = res + tmp        return res    ###########################################################################    #   Header File.    ###########################################################################    def toFunc_Imp_List(self):        return ""    ###########################################################################    #   Header File.    #   QString m_a;    #   QString m_b;    ###########################################################################    def toVal_Def_List(self):        res = ""        for item in self._gList:            tmp = "%s m_%s%s;\n\t" % ("QString",self._group[0].lower() + self._group[1:] ,item.capitalize())            res = res + tmp        return res    ###########################################################################    #   void loadSetting(const QString & fname){    #       m_a = "";    #   }    ###########################################################################    def toFunc_Init_List(self):        res = ""        for item in self._gList:            tmp = "\tm_%s%s = \"\";\n" % (self._group[0].lower() + self._group[1:] ,item.capitalize())            res = res + tmp        res = res + "\n";        return res    ###########################################################################    #   void loadSetting(const QString & fname){    #       m_a = "";    #       m_a = _data.value("a/b").value;    #   }    ###########################################################################    def toFunc_Set_List(self):        res = ""        for item in self._gList:            tmp = "\tm_%s%s = _data.value(\"%s/%s\").toString();\n" % (self._group[0].lower() + self._group[1:] ,item.capitalize(),self._group,item)            res = res + tmp        return res    ###########################################################################    #   void setGrouoOption(const QString & fname){    #       m_a = fname;    #   }    ###########################################################################    def toFunc_OutSet_List(self):        res = ""        for item in self._gList:            s1 = "void %s::set%s%s(const QString & _value){\n" % (gClassName ,self._group.capitalize(),item.capitalize())            s2 = "\tm_%s%s = %s;\n" % (self._group[0].lower() + self._group[1:] ,item.capitalize(),"_value");            s3 = "}\n\n";            s = s1 + s2 + s3            res = res + s        return res    ###########################################################################    #   void setGrouoOption(const QString & fname){    #       m_a = fname;    #   }    ###########################################################################    def toFunc_DefSet_List(self):        res = ""        for item in self._gList:            s = "\tvoid set%s%s(const QString & _value);\n" % (self._group.capitalize(),item.capitalize())            res = res + s        return res    ###########################################################################    #   QString getGroupField(){    #       return m_member;    #   }    ###########################################################################    def toFunc_Get_List(self):        res = ""        for item in self._gList:            s1 = "%s %s::get%s%s(){\n" % ("QString",gClassName,self._group.capitalize(),item.capitalize())            s2 = "\treturn m_%s%s;\n" % (self._group[0].lower() + self._group[1:] ,item.capitalize())            s3 = "}\n\n"            s = s1 + s2 + s3            res = res + s        return res    ###########################################################################    #   QString getGroupField(){    #       return m_member;    #   }    ###########################################################################    def toFunc_Save_List(self):    list = ""        for item in self._gList:            s1 = "\t_data.setValue(\"%s/%s\" ,m_%s%s);\n" % (self._group ,item , self._group[0].lower() + self._group[1:] ,item.capitalize())            list = list + s1        return list############################################################################   write string to file.###########################################################################def writeToFile(str,fname):    fp = open(fname,"w+")    fp.write(str)    fp.close()############################################################################   write the result to test.h | test.cpp file.###########################################################################def saveHeadFile(defList,varList ,defSetList):    m_hContent = Template("""/******************************************************************************File name : ${FILE_NAME}.hTile  : Header of the ${CLASS_NAME} class******************************************************************************/ #ifndef ${FILE_NAME}_H #define ${FILE_NAME}_H #include <QString> #include <QSettings> #include <QColor>class ${CLASS_NAME}{public:    ${CLASS_NAME}(){}    static ${CLASS_NAME} * getInstance();    void loadFile(const QString & fname);    void saveFile();    /*Getter/Setter*/${FUNCTION_DEF_LIST}${FUNCTION_DEFSET_LIST}private:    ${VAR_LIST}    QSettings _data;    QString m_iniFileName;};#endif""")    h_str = m_hContent.substitute(FILE_NAME=gHearFile,                                  CLASS_NAME=gClassName,                                  FUNCTION_DEF_LIST=defList,                                  FUNCTION_DEFSET_LIST=defSetList,                                  VAR_LIST=varList)    writeToFile(h_str,gHearFile + ".h")def saveBodyFile(impList,getList,setList,instance,saveList):    m_bContent = Template("""/********************************************************************************  File name : ${FILE_NAME}.cpp*  Title     : Implementation of the ${CLASS_NAME} class*******************************************************************************/#include "${FILE_NAME}.h"static ${CLASS_NAME} * gSetting = NULL;${FUNCTION_INSTANCE}${FUNCTION_IMPL_LIST}${FUNCTION_GET_LIST}${FUNCTION_SET_LIST}${FUNCTION_SAVE_LIST}""")    b_str = m_bContent.substitute(FILE_NAME=gSrcFile,                                  CLASS_NAME=gClassName,                                  FUNCTION_INSTANCE=instance,                                  FUNCTION_IMPL_LIST=impList,                                  FUNCTION_GET_LIST=getList,                                  FUNCTION_SET_LIST=setList,                                  FUNCTION_SAVE_LIST=saveList)    writeToFile(b_str,gSrcFile + ".cpp")gObjList = []gObj = CObject()####################################################################################################[OK]   key=value###################################################################################################def processWord(s):    global gObj    s = s.strip()    key,value = s.split("=",1)    key = key.strip(" \r\n")    value = value.strip(" \r\n")    gObj.addMember(key,value)####################################################################################################[OK]   getGroup("[Cache]") => "Cache"###################################################################################################def getGroup(str):    str = str.strip()    ret = re.match(r"\[(.+)\]$",str)    if ret != None:        return ret.group(1)    return None####################################################################################################[OK]   isGroup("[Cache]") => true###################################################################################################def isGroup(str):    str = str.strip()    ret = re.match(r"\[\w|\d]+\]$",str)    if ret != None:        return True    return False####################################################################################################[OK]   whether string is empty.###################################################################################################def isEmpty(str):    if len(str) <= 1:        return True    else:        return False####################################################################################################[OK]   parse the content of ini file,#       and generate the Node to gObjList.###################################################################################################def doParse(iniContent):    global gObj,gObjList    #getCin(hd)    varList = ""    fun_def_list = ""    lineList = []    m_group = ""        lineList = iniContent.split("\n")    isStart = True    for s in lineList:        s = s.strip()                       #   standared the string.        if isEmpty(s):                      #   ignore the space line.            continue        if re.match("#",s) != None:         #   ignore the conment line.            continue        if isGroup(s):                      #   is [Cache] field.            m_group = getGroup(s)            if isStart == True:                gObj.setGroup(m_group)                isStart = False            else:                gObjList.append(gObj)                gObj = CObject()                gObj.setGroup(m_group)        else:            processWord(s)    gObjList.append(gObj)####################################################################################################[OK]   read content from fname.###################################################################################################def readFile(fname):    with open(fname, 'r') as f:        return f.read()####################################################################################################[OK]   baseFilename("test.ini") => test###################################################################################################def baseFilename(fname):    name,ext = fname.rsplit(".")    return name####################################################################################################[OK]   genSetting.py test.ini ,  True#       check the user`s input args.###################################################################################################def checkArgs():    arg_len = len(sys.argv)    if arg_len != 2:        print "[Usage: genSetting.py test.ini]"        return False    return True####################################################################################################[OK]   checkFileFormat("test.ini") True###################################################################################################def checkFileFormat(fname):    ret = re.search(r'\w+\.ini$',fname)    if ret != None:        return True    return False####################################################################################################[OK]   Main Function.###################################################################################################def main():    global gObjList    if checkArgs() == False:        return    if checkFileFormat(sys.argv[1]) == False:        return    base_name = baseFilename(sys.argv[1])    iniContent = readFile(sys.argv[1])    doParse(iniContent)    m_varList = ""    m_defList = ""    m_impFunc = ""    m_getList = ""    m_initList = ""    m_instance = ""    m_setList = ""    m_saveList = ""    m_defSetList = ""    for obj in gObjList:        m_varList = m_varList + obj.toVal_Def_List()        m_defList = m_defList + obj.toFunc_Def_List()        m_getList = m_getList + obj.toFunc_Get_List()        m_setList = m_setList + obj.toFunc_OutSet_List()        m_impFunc = m_impFunc + obj.toFunc_Set_List()        m_initList = m_initList + obj.toFunc_Init_List()        m_saveList = m_saveList + obj.toFunc_Save_List()        m_defSetList = m_defSetList + obj.toFunc_DefSet_List()    m_instanceContent = Template("""${CLASS_NAME} * ${CLASS_NAME}::getInstance(){if ( NULL == gSetting )gSetting = new ${CLASS_NAME}();return gSetting;}""")    sv1 = "void %s::saveFile(){\n" % (gClassName)    sv2 = "\tQSettings _data(m_iniFileName, QSettings::IniFormat);\n\t_data.setIniCodec(\"UTF-8\");\n";    sv3 = m_saveList;    m_saveList = sv1 + sv2 + sv3 + "}\n\n"    m_instance = m_instanceContent.substitute(CLASS_NAME=gClassName)    s1 = "void %s::loadFile(const QString & fname){\n" % (gClassName)    s2 = "\tQSettings _data(fname, QSettings::IniFormat);\n\t_data.setIniCodec(\"UTF-8\");\n";    s3 = "\t%s = %s;\n" % ("m_iniFileName" , "fname")    s4 = "}\n"    loadFunc = s1 + s2 + s3 + m_initList + m_impFunc + s4        saveHeadFile(m_defList,m_varList ,m_defSetList)    saveBodyFile(loadFunc,m_getList,m_setList,m_instance,m_saveList)main()


@@用法说明

genQtSetting.py config.ini

生成解析config.ini文件的类

0 0