|  | @@ -1,5 +1,5 @@
 | 
											
												
													
														|  |  # -*- coding:utf-8 -*-
 |  |  # -*- coding:utf-8 -*-
 | 
											
												
													
														|  | -import os
 |  | 
 | 
											
												
													
														|  | 
 |  | +import os, json
 | 
											
												
													
														|  |  from collections import OrderedDict
 |  |  from collections import OrderedDict
 | 
											
												
													
														|  |  from UIT_PathManage import UITPathManage
 |  |  from UIT_PathManage import UITPathManage
 | 
											
												
													
														|  |  from TExcelParser import CExcelParser
 |  |  from TExcelParser import CExcelParser
 | 
											
										
											
												
													
														|  | @@ -120,10 +120,45 @@ class COptionExcel(CBaseLog):
 | 
											
												
													
														|  |      def addExcel(self, xlsPath):
 |  |      def addExcel(self, xlsPath):
 | 
											
												
													
														|  |          self.__excelParse.read_excel(xlsPath)
 |  |          self.__excelParse.read_excel(xlsPath)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    
 |  | 
 | 
											
												
													
														|  | -    # 获取指定option/value_name下的所有子项(option/value)的ocr键对值;
 |  | 
 | 
											
												
													
														|  | -    # 示例:[{'suboption1': 'suboption1 ocr'}, {'suboption2': 'suboption2 ocr'}]
 |  | 
 | 
											
												
													
														|  | -    def getOptionSubitemMap(self, optionName, isOption = True):
 |  | 
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    函数:获取指定option下的所有子项名称(option作为parent,获取该父项下的所有option字段)
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    def getOptionAllChildItemName(self, optionName):
 | 
											
												
													
														|  | 
 |  | +        optionList = []
 | 
											
												
													
														|  | 
 |  | +        paths = self.__pathParams.paths
 | 
											
												
													
														|  | 
 |  | +        for level in paths:
 | 
											
												
													
														|  | 
 |  | +            if paths[level].has_key(optionName):
 | 
											
												
													
														|  | 
 |  | +                optionDictList = paths[level][optionName]["value"]
 | 
											
												
													
														|  | 
 |  | +                for optionDict in optionDictList:
 | 
											
												
													
														|  | 
 |  | +                    optionList.append(optionDict["option"])
 | 
											
												
													
														|  | 
 |  | +        # print "optionList:", optionList, type(optionList)
 | 
											
												
													
														|  | 
 |  | +        return optionList
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +        函数:获取指定option下的所有子项名称(option作为parent,获取该父项下的所有option字段)
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    def getOptionAllChildItemOcr(self, optionName):
 | 
											
												
													
														|  | 
 |  | +        optionList = []
 | 
											
												
													
														|  | 
 |  | +        paths = self.__pathParams.paths
 | 
											
												
													
														|  | 
 |  | +        for level in paths:
 | 
											
												
													
														|  | 
 |  | +            if paths[level].has_key(optionName):
 | 
											
												
													
														|  | 
 |  | +                optionDictList = paths[level][optionName]["value"]
 | 
											
												
													
														|  | 
 |  | +                for optionDict in optionDictList:
 | 
											
												
													
														|  | 
 |  | +                    optionList.append(optionDict["option"])
 | 
											
												
													
														|  | 
 |  | +        # print "optionList:", optionList, type(optionList)
 | 
											
												
													
														|  | 
 |  | +        return optionList
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    函数:获取指定option/value_name下的所有子项(option/value)的ocr键对值;
 | 
											
												
													
														|  | 
 |  | +    示例:
 | 
											
												
													
														|  | 
 |  | +        [
 | 
											
												
													
														|  | 
 |  | +            {'suboption1': 'suboption1 ocr'}, 
 | 
											
												
													
														|  | 
 |  | +            {'suboption2': 'suboption2 ocr'}
 | 
											
												
													
														|  | 
 |  | +        ]
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    def getOptionAllChildItemMap(self, optionName, isOption=True):
 | 
											
												
													
														|  |          if type(optionName) == str:
 |  |          if type(optionName) == str:
 | 
											
												
													
														|  |              optionName = unicode(optionName)
 |  |              optionName = unicode(optionName)
 | 
											
												
													
														|  |          pairs = []
 |  |          pairs = []
 | 
											
										
											
												
													
														|  | @@ -137,23 +172,98 @@ class COptionExcel(CBaseLog):
 | 
											
												
													
														|  |                          for item in self.__pathParams.paths[lev][optionName]["value"]:
 |  |                          for item in self.__pathParams.paths[lev][optionName]["value"]:
 | 
											
												
													
														|  |                              pairs.append({item['option']: item['option_for_ocr'].split(';')})
 |  |                              pairs.append({item['option']: item['option_for_ocr'].split(';')})
 | 
											
												
													
														|  |                          break
 |  |                          break
 | 
											
												
													
														|  | -                    #endif
 |  | 
 | 
											
												
													
														|  | -                #endfor
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    # endif
 | 
											
												
													
														|  | 
 |  | +                # endfor
 | 
											
												
													
														|  |                  if found is True:
 |  |                  if found is True:
 | 
											
												
													
														|  |                      break
 |  |                      break
 | 
											
												
													
														|  | -            #endfor
 |  | 
 | 
											
												
													
														|  | 
 |  | +            # endfor
 | 
											
												
													
														|  |          else:
 |  |          else:
 | 
											
												
													
														|  |              if optionName in self.__valueParams.values:
 |  |              if optionName in self.__valueParams.values:
 | 
											
												
													
														|  |                  for item in self.__valueParams.values[optionName]["value"]:
 |  |                  for item in self.__valueParams.values[optionName]["value"]:
 | 
											
												
													
														|  |                      pairs.append({item['value']: item['value_for_ocr'].split(';')})
 |  |                      pairs.append({item['value']: item['value_for_ocr'].split(';')})
 | 
											
												
													
														|  | -        #endif
 |  | 
 | 
											
												
													
														|  | 
 |  | +        # endif
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          return pairs
 |  |          return pairs
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    
 |  | 
 | 
											
												
													
														|  | -    # 获取指定option/value_name下的所有子项(option/value)的ocr值;
 |  | 
 | 
											
												
													
														|  | -    # 示例:[['suboption1 ocr', 'ocr2', 'ocr3'],['suboption2 ocr'], ['suboption3 orc']]
 |  | 
 | 
											
												
													
														|  | -    def getOptionSubItemOcrList(self, optionName, isOption = True):
 |  | 
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +        函数:获取指定option/value_name下的所有兄弟项(相同parent)的ocr键对值;
 | 
											
												
													
														|  | 
 |  | +        示例:
 | 
											
												
													
														|  | 
 |  | +            [
 | 
											
												
													
														|  | 
 |  | +                {'suboption1': 'suboption1 ocr'}, 
 | 
											
												
													
														|  | 
 |  | +                {'suboption2': 'suboption2 ocr'}
 | 
											
												
													
														|  | 
 |  | +            ]
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    def getOptionAllSiblingItemMap(self, optionName, isOption=True):
 | 
											
												
													
														|  | 
 |  | +        pass
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    函数:获取指定option/value_name下的所有兄弟项(相同parent)的 ocr:option 字典值;
 | 
											
												
													
														|  | 
 |  | +    示例:
 | 
											
												
													
														|  | 
 |  | +        {
 | 
											
												
													
														|  | 
 |  | +            'option1_ocr': 'option1', 
 | 
											
												
													
														|  | 
 |  | +            'option2_ocr': 'option2',
 | 
											
												
													
														|  | 
 |  | +            'option3_ocr': 'option3',
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    def getOptionAllSiblingItemDict(self, optionName, isOption=True):
 | 
											
												
													
														|  | 
 |  | +        # 编码转换;
 | 
											
												
													
														|  | 
 |  | +        if type(optionName) == str:
 | 
											
												
													
														|  | 
 |  | +            option = unicode(optionName)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        found = False
 | 
											
												
													
														|  | 
 |  | +        dict_ocr = {}
 | 
											
												
													
														|  | 
 |  | +        list_ocr = []
 | 
											
												
													
														|  | 
 |  | +        if isOption is True:
 | 
											
												
													
														|  | 
 |  | +            # 首先,字典不排序,需要倒序;
 | 
											
												
													
														|  | 
 |  | +            paths = reversed(self.__pathParams.paths)
 | 
											
												
													
														|  | 
 |  | +            for level in paths:
 | 
											
												
													
														|  | 
 |  | +                for parent in self.__pathParams.paths[level]:
 | 
											
												
													
														|  | 
 |  | +                    for vals in self.__pathParams.paths[level][parent]["value"]:
 | 
											
												
													
														|  | 
 |  | +                        if vals['option'].lower() == option.lower():
 | 
											
												
													
														|  | 
 |  | +                            found = True
 | 
											
												
													
														|  | 
 |  | +                            break
 | 
											
												
													
														|  | 
 |  | +                    # endfor
 | 
											
												
													
														|  | 
 |  | +                    # 找到退出;
 | 
											
												
													
														|  | 
 |  | +                    if found is True:
 | 
											
												
													
														|  | 
 |  | +                        break
 | 
											
												
													
														|  | 
 |  | +                # endfor
 | 
											
												
													
														|  | 
 |  | +                # 找到退出;
 | 
											
												
													
														|  | 
 |  | +                if found is True:
 | 
											
												
													
														|  | 
 |  | +                    break
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            # 遍历value列表;
 | 
											
												
													
														|  | 
 |  | +            if found is True:
 | 
											
												
													
														|  | 
 |  | +                for val in self.__pathParams.paths[level][parent]["value"]:
 | 
											
												
													
														|  | 
 |  | +                    list_ocr = val['option_for_ocr'].split(';')
 | 
											
												
													
														|  | 
 |  | +                    for ocr in list_ocr:
 | 
											
												
													
														|  | 
 |  | +                        dict_ocr[ocr.lower()] = val['option']
 | 
											
												
													
														|  | 
 |  | +        else:
 | 
											
												
													
														|  | 
 |  | +            if option in self.__valueParams.values:
 | 
											
												
													
														|  | 
 |  | +                for val in self.__valueParams.values[option]["value"]:
 | 
											
												
													
														|  | 
 |  | +                    list_ocr = val['value_for_ocr'].split(';')
 | 
											
												
													
														|  | 
 |  | +                    for ocr in list_ocr:
 | 
											
												
													
														|  | 
 |  | +                        dict_ocr[ocr.lower()] = val['value']
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        print 'unsorted=', dict_ocr
 | 
											
												
													
														|  | 
 |  | +        # 按长度排序;
 | 
											
												
													
														|  | 
 |  | +        list_ocr = sorted(dict_ocr.keys(), key=lambda key: len(key), reverse=True)
 | 
											
												
													
														|  | 
 |  | +        dict_reuslt = OrderedDict()
 | 
											
												
													
														|  | 
 |  | +        for ocr in list_ocr:
 | 
											
												
													
														|  | 
 |  | +            dict_reuslt[ocr] = dict_ocr[ocr]
 | 
											
												
													
														|  | 
 |  | +        # 返回结果;
 | 
											
												
													
														|  | 
 |  | +        return dict_reuslt
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +        函数:获取指定option/value_name下的所有子项(option/value)的ocr值, 1d表示One-dimensional(一维数组);
 | 
											
												
													
														|  | 
 |  | +        示例:
 | 
											
												
													
														|  | 
 |  | +            [
 | 
											
												
													
														|  | 
 |  | +                ['suboption1 ocr', 'ocr2', 'ocr3'],
 | 
											
												
													
														|  | 
 |  | +                ['suboption2 ocr'], 
 | 
											
												
													
														|  | 
 |  | +                ['suboption3 orc']
 | 
											
												
													
														|  | 
 |  | +            ]
 | 
											
												
													
														|  | 
 |  | +        '''
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    def getOptionAllChildItemOcrList1d(self, optionName, isOption=True):
 | 
											
												
													
														|  |          if type(optionName) == str:
 |  |          if type(optionName) == str:
 | 
											
												
													
														|  |              optionName = unicode(optionName)
 |  |              optionName = unicode(optionName)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -162,30 +272,253 @@ class COptionExcel(CBaseLog):
 | 
											
												
													
														|  |          if isOption is True:
 |  |          if isOption is True:
 | 
											
												
													
														|  |              found = False
 |  |              found = False
 | 
											
												
													
														|  |              for lev in self.__pathParams.paths:
 |  |              for lev in self.__pathParams.paths:
 | 
											
												
													
														|  | -                for item in self.__pathParams.paths[lev]:
 |  | 
 | 
											
												
													
														|  | -                    if item.lower() == optionName.lower():
 |  | 
 | 
											
												
													
														|  | 
 |  | +                for parent in self.__pathParams.paths[lev]:
 | 
											
												
													
														|  | 
 |  | +                    if parent.lower() == optionName.lower():
 | 
											
												
													
														|  | 
 |  | +                        found = True
 | 
											
												
													
														|  | 
 |  | +                        for item in self.__pathParams.paths[lev][optionName]["value"]:
 | 
											
												
													
														|  | 
 |  | +                            list_ocr.extend(item['option_for_ocr'].split(';'))
 | 
											
												
													
														|  | 
 |  | +                        break
 | 
											
												
													
														|  | 
 |  | +                    # endif
 | 
											
												
													
														|  | 
 |  | +                # endfor
 | 
											
												
													
														|  | 
 |  | +                if found is True:
 | 
											
												
													
														|  | 
 |  | +                    break
 | 
											
												
													
														|  | 
 |  | +            # endfor
 | 
											
												
													
														|  | 
 |  | +        else:
 | 
											
												
													
														|  | 
 |  | +            if optionName in self.__valueParams.values:
 | 
											
												
													
														|  | 
 |  | +                self.info(u"找到%s的value表数据" % optionName)
 | 
											
												
													
														|  | 
 |  | +                for item in self.__valueParams.values[optionName]["value"]:
 | 
											
												
													
														|  | 
 |  | +                    list_ocr.extend(item['value_for_ocr'].split(';'))
 | 
											
												
													
														|  | 
 |  | +            else:
 | 
											
												
													
														|  | 
 |  | +                self.error(u"没有找到%s的value表数据" % optionName)
 | 
											
												
													
														|  | 
 |  | +        # endif
 | 
											
												
													
														|  | 
 |  | +        return list_ocr
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    函数:获取指定option/value_name下的所有子项(option/value)的ocr值,2d表示Two-dimensional(二维数组);
 | 
											
												
													
														|  | 
 |  | +    示例:
 | 
											
												
													
														|  | 
 |  | +        [
 | 
											
												
													
														|  | 
 |  | +            ['suboption1 ocr', 'ocr2', 'ocr3'],
 | 
											
												
													
														|  | 
 |  | +            ['suboption2 ocr'], 
 | 
											
												
													
														|  | 
 |  | +            ['suboption3 orc']
 | 
											
												
													
														|  | 
 |  | +        ]
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    def getOptionAllChildItemOcrList2d(self, optionName, isOption=True):
 | 
											
												
													
														|  | 
 |  | +        if type(optionName) == str:
 | 
											
												
													
														|  | 
 |  | +            optionName = unicode(optionName)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        list_ocr = []
 | 
											
												
													
														|  | 
 |  | +        # 路径表或值表;
 | 
											
												
													
														|  | 
 |  | +        if isOption is True:
 | 
											
												
													
														|  | 
 |  | +            found = False
 | 
											
												
													
														|  | 
 |  | +            for lev in self.__pathParams.paths:
 | 
											
												
													
														|  | 
 |  | +                for parent in self.__pathParams.paths[lev]:
 | 
											
												
													
														|  | 
 |  | +                    if parent.lower() == optionName.lower():
 | 
											
												
													
														|  |                          found = True
 |  |                          found = True
 | 
											
												
													
														|  |                          for item in self.__pathParams.paths[lev][optionName]["value"]:
 |  |                          for item in self.__pathParams.paths[lev][optionName]["value"]:
 | 
											
												
													
														|  | -                            if optionName.lower() != item['option'].lower():
 |  | 
 | 
											
												
													
														|  | -                                list_ocr.append(item['option_for_ocr'].split(';'))
 |  | 
 | 
											
												
													
														|  | 
 |  | +                            list_ocr.append(item['option_for_ocr'].split(';'))
 | 
											
												
													
														|  |                          break
 |  |                          break
 | 
											
												
													
														|  | -                    #endif
 |  | 
 | 
											
												
													
														|  | -                #endfor
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    # endif
 | 
											
												
													
														|  | 
 |  | +                # endfor
 | 
											
												
													
														|  |                  if found is True:
 |  |                  if found is True:
 | 
											
												
													
														|  |                      break
 |  |                      break
 | 
											
												
													
														|  | -            #endfor
 |  | 
 | 
											
												
													
														|  | 
 |  | +            # endfor
 | 
											
												
													
														|  |          else:
 |  |          else:
 | 
											
												
													
														|  |              if optionName in self.__valueParams.values:
 |  |              if optionName in self.__valueParams.values:
 | 
											
												
													
														|  | 
 |  | +                self.info(u"找到%s的value表数据" % optionName)
 | 
											
												
													
														|  |                  for item in self.__valueParams.values[optionName]["value"]:
 |  |                  for item in self.__valueParams.values[optionName]["value"]:
 | 
											
												
													
														|  |                      list_ocr.append(item['value_for_ocr'].split(';'))
 |  |                      list_ocr.append(item['value_for_ocr'].split(';'))
 | 
											
												
													
														|  | 
 |  | +            else:
 | 
											
												
													
														|  | 
 |  | +                self.error(u"没有找到%s的value表数据" % optionName)
 | 
											
												
													
														|  |          # endif
 |  |          # endif
 | 
											
												
													
														|  |          return list_ocr
 |  |          return list_ocr
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    def getOption
 |  | 
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    函数:获取指定option所有兄弟项(相同parent)的ocr值, 1d表示One-dimensional(一维数组);
 | 
											
												
													
														|  | 
 |  | +    示例:
 | 
											
												
													
														|  | 
 |  | +        [
 | 
											
												
													
														|  | 
 |  | +            ['option1 ocr', 'ocr2', 'ocr3'],
 | 
											
												
													
														|  | 
 |  | +            ['option2 ocr'], 
 | 
											
												
													
														|  | 
 |  | +            ['option3 orc']
 | 
											
												
													
														|  | 
 |  | +        ]
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    def getOptionAllSiblingItemOcrList1d(self, optionName):
 | 
											
												
													
														|  | 
 |  | +        # 编码转换;
 | 
											
												
													
														|  | 
 |  | +        if type(optionName) == str:
 | 
											
												
													
														|  | 
 |  | +            optionName = unicode(optionName)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        found = False
 | 
											
												
													
														|  | 
 |  | +        list_ocr = []
 | 
											
												
													
														|  | 
 |  | +        # 首先,字典不排序,需要倒序;
 | 
											
												
													
														|  | 
 |  | +        paths = reversed(self.__pathParams.paths)
 | 
											
												
													
														|  | 
 |  | +        for level in paths:
 | 
											
												
													
														|  | 
 |  | +            for parent in self.__pathParams.paths[level]:
 | 
											
												
													
														|  | 
 |  | +                for vals in self.__pathParams.paths[level][parent]["value"]:
 | 
											
												
													
														|  | 
 |  | +                    if vals['option'].lower() == optionName.lower():
 | 
											
												
													
														|  | 
 |  | +                        found = True
 | 
											
												
													
														|  | 
 |  | +                        break
 | 
											
												
													
														|  | 
 |  | +                # endfor
 | 
											
												
													
														|  | 
 |  | +                # 找到退出;
 | 
											
												
													
														|  | 
 |  | +                if found is True:
 | 
											
												
													
														|  | 
 |  | +                    break
 | 
											
												
													
														|  | 
 |  | +            # endfor
 | 
											
												
													
														|  | 
 |  | +            # 找到退出;
 | 
											
												
													
														|  | 
 |  | +            if found is True:
 | 
											
												
													
														|  | 
 |  | +                break
 | 
											
												
													
														|  | 
 |  | +        # endfor
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        # 遍历value列表;
 | 
											
												
													
														|  | 
 |  | +        if found is True:
 | 
											
												
													
														|  | 
 |  | +            for val in self.__pathParams.paths[level][parent]["value"]:
 | 
											
												
													
														|  | 
 |  | +                list_ocr.extend(val['option_for_ocr'].split(';'))
 | 
											
												
													
														|  | 
 |  | +        # 按长度排序;
 | 
											
												
													
														|  | 
 |  | +        list_ocr.sort(key=lambda i: len(i), reverse=True)
 | 
											
												
													
														|  | 
 |  | +        # 返回结果;
 | 
											
												
													
														|  | 
 |  | +        return list_ocr
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    函数:获取指定option的ocr,以list返回
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    def getOptionOcr(self, optionName):
 | 
											
												
													
														|  | 
 |  | +        # 编码转换;
 | 
											
												
													
														|  | 
 |  | +        if type(optionName) == str:
 | 
											
												
													
														|  | 
 |  | +            option = unicode(optionName)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        found = False
 | 
											
												
													
														|  | 
 |  | +        list_ocr = []
 | 
											
												
													
														|  | 
 |  | +        # 首先,字典不排序,需要倒序;
 | 
											
												
													
														|  | 
 |  | +        paths = reversed(self.__pathParams.paths)
 | 
											
												
													
														|  | 
 |  | +        for level in paths:
 | 
											
												
													
														|  | 
 |  | +            for parent in self.__pathParams.paths[level]:
 | 
											
												
													
														|  | 
 |  | +                for vals in self.__pathParams.paths[level][parent]["value"]:
 | 
											
												
													
														|  | 
 |  | +                    if vals['option'].lower() == option.lower():
 | 
											
												
													
														|  | 
 |  | +                        list_ocr = vals['option_for_ocr'].split(';')
 | 
											
												
													
														|  | 
 |  | +                        found = True
 | 
											
												
													
														|  | 
 |  | +                        break
 | 
											
												
													
														|  | 
 |  | +                # endfor
 | 
											
												
													
														|  | 
 |  | +                # 找到退出;
 | 
											
												
													
														|  | 
 |  | +                if found is True:
 | 
											
												
													
														|  | 
 |  | +                    break
 | 
											
												
													
														|  | 
 |  | +            # endfor
 | 
											
												
													
														|  | 
 |  | +            # 找到退出;
 | 
											
												
													
														|  | 
 |  | +            if found is True:
 | 
											
												
													
														|  | 
 |  | +                break
 | 
											
												
													
														|  | 
 |  | +        # endfor
 | 
											
												
													
														|  | 
 |  | +        # 返回结果;
 | 
											
												
													
														|  | 
 |  | +        return list_ocr
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +        函数:获取指定option的value表值,如果参数value未指定具体值则获取全部valueName的值;
 | 
											
												
													
														|  | 
 |  | +        示例:
 | 
											
												
													
														|  | 
 |  | +        {
 | 
											
												
													
														|  | 
 |  | +            "option":"option名称",
 | 
											
												
													
														|  | 
 |  | +            "values":[option在value表中的所有value字段],
 | 
											
												
													
														|  | 
 |  | +            "value_for_ocr":[option在value表中所有value_for_ocr字段],
 | 
											
												
													
														|  | 
 |  | +            "enter_key":"",
 | 
											
												
													
														|  | 
 |  | +            "move_key":"",
 | 
											
												
													
														|  | 
 |  | +            "others":"",
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    def getOptionValues(self, optionName, value=""):
 | 
											
												
													
														|  | 
 |  | +        # 编码转换;
 | 
											
												
													
														|  | 
 |  | +        if type(optionName) == str:
 | 
											
												
													
														|  | 
 |  | +            option = unicode(optionName)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        # option/value name是否在value表中的;
 | 
											
												
													
														|  | 
 |  | +        if optionName not in self.__valueParams.values:
 | 
											
												
													
														|  | 
 |  | +            return []
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        optValues = self.valueParams.values[option]["value"]
 | 
											
												
													
														|  | 
 |  | +        valueList = []
 | 
											
												
													
														|  | 
 |  | +        valueOcrList = []
 | 
											
												
													
														|  | 
 |  | +        for item in optValues:
 | 
											
												
													
														|  | 
 |  | +            valueList.append(item["value"])
 | 
											
												
													
														|  | 
 |  | +            valueOcrList.append(item["value_for_ocr"])
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        vp = {"option": option, "value": valueList, "value_for_ocr": valueOcrList,
 | 
											
												
													
														|  | 
 |  | +              "enter_key": self.valueParams.values[option]["enter_key"],
 | 
											
												
													
														|  | 
 |  | +              "move_key": self.valueParams.values[option]["move_key"],
 | 
											
												
													
														|  | 
 |  | +              "others": self.valueParams.values[option]['others']}
 | 
											
												
													
														|  | 
 |  | +        # 找到value对应的ocr;
 | 
											
												
													
														|  | 
 |  | +        if value != "":
 | 
											
												
													
														|  | 
 |  | +            vp["value"] = value
 | 
											
												
													
														|  | 
 |  | +            for item in self.valueParams.values[option]["value"]:
 | 
											
												
													
														|  | 
 |  | +                if "range(" in item["value"]:
 | 
											
												
													
														|  | 
 |  | +                    vp["value_for_ocr"] = item["value_for_ocr"].split(';')
 | 
											
												
													
														|  | 
 |  | +                    break
 | 
											
												
													
														|  | 
 |  | +                elif item["value"].lower() == value.lower():
 | 
											
												
													
														|  | 
 |  | +                    vp["value_for_ocr"] = item["value_for_ocr"].split(';')
 | 
											
												
													
														|  | 
 |  | +                    break
 | 
											
												
													
														|  | 
 |  | +            # endfor
 | 
											
												
													
														|  | 
 |  | +        # endif
 | 
											
												
													
														|  | 
 |  | +        # 返回结果;
 | 
											
												
													
														|  | 
 |  | +        return vp
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    def getOptionInfo(self, optionName):
 | 
											
												
													
														|  | 
 |  | +        # 编码转换;
 | 
											
												
													
														|  | 
 |  | +        if type(optionName) == str:
 | 
											
												
													
														|  | 
 |  | +            option = unicode(optionName)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        found = False
 | 
											
												
													
														|  | 
 |  | +        layers = 0
 | 
											
												
													
														|  | 
 |  | +        dict_option = {}
 | 
											
												
													
														|  | 
 |  | +        # 首先,字典不排序,需要倒序;
 | 
											
												
													
														|  | 
 |  | +        paths = reversed(self.__pathParams.paths)
 | 
											
												
													
														|  | 
 |  | +        for level in paths:
 | 
											
												
													
														|  | 
 |  | +            for parent in self.__pathParams.paths[level]:
 | 
											
												
													
														|  | 
 |  | +                for vals in self.__pathParams.paths[level][parent]["value"]:
 | 
											
												
													
														|  | 
 |  | +                    if vals['option'].lower() == option.lower():
 | 
											
												
													
														|  | 
 |  | +                        if dict_option.__len__() == 0:
 | 
											
												
													
														|  | 
 |  | +                            found = True
 | 
											
												
													
														|  | 
 |  | +                            dict_option['level'] = level
 | 
											
												
													
														|  | 
 |  | +                            dict_option['parent'] = parent
 | 
											
												
													
														|  | 
 |  | +                            dict_option['others'] = self.__pathParams.paths[level][parent]['others']
 | 
											
												
													
														|  | 
 |  | +                            dict_option['enter_key'] = self.__pathParams.paths[level][parent]['enter_key']
 | 
											
												
													
														|  | 
 |  | +                            dict_option['move_key'] = self.__pathParams.paths[level][parent]['move_key']
 | 
											
												
													
														|  | 
 |  | +                            dict_option['option_ocr'] = vals['option_for_ocr'].split(';')
 | 
											
												
													
														|  | 
 |  | +                            dict_option['option_move_key'] = vals['option_move_key']
 | 
											
												
													
														|  | 
 |  | +                            dict_option['option_enter_key'] = vals['option_enter_key']
 | 
											
												
													
														|  | 
 |  | +                            dict_option['option_others'] = vals['option_others']
 | 
											
												
													
														|  | 
 |  | +                        option = parent
 | 
											
												
													
														|  | 
 |  | +                        layers += 1  # 层数;
 | 
											
												
													
														|  | 
 |  | +                        break
 | 
											
												
													
														|  | 
 |  | +                # endfor
 | 
											
												
													
														|  | 
 |  | +            # endfor
 | 
											
												
													
														|  | 
 |  | +        # endfor
 | 
											
												
													
														|  | 
 |  | +        if found is True:
 | 
											
												
													
														|  | 
 |  | +            dict_option['layers'] = layers
 | 
											
												
													
														|  | 
 |  | +            # first层次的parent名称;
 | 
											
												
													
														|  | 
 |  | +            dict_option['first_parent'] = option
 | 
											
												
													
														|  | 
 |  | +        # 返回结果;
 | 
											
												
													
														|  | 
 |  | +        return found, dict_option
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    函数:获取指定的option在value表中的所有value字段;
 | 
											
												
													
														|  | 
 |  | +    '''
 | 
											
												
													
														|  | 
 |  | +    def getOptionAllValueName(self, optionName):
 | 
											
												
													
														|  | 
 |  | +        valueList = []
 | 
											
												
													
														|  | 
 |  | +        if self.valueParams.values.has_key(optionName):
 | 
											
												
													
														|  | 
 |  | +            valueDictList = self.valueParams.values[optionName]["value"]
 | 
											
												
													
														|  | 
 |  | +            for valueDict in valueDictList:
 | 
											
												
													
														|  | 
 |  | +                valueList.append(valueDict["value"])
 | 
											
												
													
														|  | 
 |  | +        # print "valueList:", valueList, type(valueList)
 | 
											
												
													
														|  | 
 |  | +        if valueList.__len__() == 1 and "range(" in valueList[0]:
 | 
											
												
													
														|  | 
 |  | +            value_for_ocr_low = str(valueList[0]).lower()
 | 
											
												
													
														|  | 
 |  | +            str_num = value_for_ocr_low.replace("range", "")
 | 
											
												
													
														|  | 
 |  | +            list_num = eval(str_num)
 | 
											
												
													
														|  | 
 |  | +            min_num = list_num[0]
 | 
											
												
													
														|  | 
 |  | +            max_num = list_num[1]
 | 
											
												
													
														|  | 
 |  | +            return [min_num, max_num]
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        return valueList
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  if __name__ == "__main__":
 |  |  if __name__ == "__main__":
 | 
											
												
													
														|  |      exData = CExtraData()
 |  |      exData = CExtraData()
 | 
											
												
													
														|  |      opxls = COptionExcel(exData)
 |  |      opxls = COptionExcel(exData)
 | 
											
												
													
														|  | -    # print opxls.pathParams.paths
 |  | 
 | 
											
												
													
														|  | -    print u"getOptionMap", opxls.getOptionSubitemMap('picture')
 |  | 
 | 
											
												
													
														|  | -    print u"getOptionSubItemOcrList", opxls.getOptionSubItemOcrList('picture', False)
 |  | 
 | 
											
												
													
														|  | 
 |  | +    # print json.dumps(opxls.pathParams.paths)
 | 
											
												
													
														|  | 
 |  | +    # print u"getOptionMap", opxls.getOptionAllChildItemMap('picture')
 | 
											
												
													
														|  | 
 |  | +    # print u"getOptionAllChildItemOcrList1d", opxls.getOptionAllChildItemOcrList1d('picture', False)
 | 
											
												
													
														|  | 
 |  | +    # print u"getOptionAllChildItemOcrList2d", opxls.getOptionAllChildItemOcrList2d('picture', False)
 | 
											
												
													
														|  | 
 |  | +    # print "getOptionAllSiblingItemOcrList", opxls.getOptionAllSiblingItemOcrList('picture')
 | 
											
												
													
														|  | 
 |  | +    print "getOptionAllChildItem", opxls.getOptionAllChildItem('picture')
 |