<sup id="sjju3"><noscript id="sjju3"></noscript></sup>
    <big id="sjju3"></big>

  • <blockquote id="sjju3"></blockquote>
    <blockquote id="sjju3"></blockquote>

      <td id="sjju3"></td>

      <big id="sjju3"></big>
        <code id="sjju3"><strong id="sjju3"><dl id="sjju3"></dl></strong></code>
      1. 详解Python读取yaml文件多层菜单

         更新时间:2019年03月23日 15:04:58   作者:一个测试的梦想   我要评论

        这篇文章主要介绍了Python读取yaml文件多层菜单,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

        需要用到的Python知识点

        1. Python的对象属性方法;
        2. 用到?#20540;洌鹝ey:value}值的提取;
        3. 列表的增加;
        4. if循环结合break的使用;
        5. yaml文件读取;

        代码如下:

        #!/usr/bin/python34
        import sys,os,re,yaml,time
        #reload(sys)
        #sys.setdefaultencoding('utf-8') 
        
        ######################对input输入字符类型判断并转化#####################
        def input_handle(s):
         if str.isdigit(s):     ###对输入是否是数字进?#20449;?#26029;
          s = int(s)      ###如果输出的是个数字,则转化为整数类型
         return s
         
         # try:
         #  eval(s)       ###eval将字符串str当成有效的表达式来求值并返回计算结果
         # except NameError:     ###名称错误
         #  return s
         # except SyntaxError:     ###语法错误
         #  return s
         # else:
         #  return eval(s)
         
        
        ####################框架函数######################
        def framework(province='',city='',county=''):
         os.system('cls')        ###清屏###
         print('''
        ******************************************************************
        *                *
        *      欢迎?#26790;?#20840;国省市查询系统     *
        *                *
        ******************************************************************
        
        
        +-----------------------------------------------------------------
        |   省份: %s 
        |
        |   市(区): %s 
        |
        |   县(区): %s
        +-----------------------------------------------------------------
        ''' % (province,city,county))
         
        ######################输出展示函数#################
        def show(province_name='',city_name='',county_name=''):
         output= '''
        ******************************************************************
        *                *
             美丽的%s %s %s
        *       欢迎您        *
             这里的山美,水美,妹子更美      
        *                *
        ****************************************************************** 
        '''
         print(output % (province_name,city_name,county_name))
        
        
        ###################菜单第一层省份或直辖市输出函数#################
        def province_show(province_list):
         
         ############申明全?#30452;?#37327;####################
         global P_NAME
         global C_NAME
         global X_NAME
         global FLAG_M
        
         province_dict = {}   
         ############对省份或直辖市列表参数进行遍历并加上数字编号############### 
         for k,v in enumerate(province_list,1):
           province_dict[k] = v
           print('%d . %s' % (k,v) + '\t',end='')  ###加上end参数,取消默认换行###
           if k % 4 == 0:        ###按4列换行###
            print()
         print('\n================================================================')
         print('q : Exit')
        
         ###############键盘读入编号或省份,可以输入汉字#################
         province_index = input('请输入编号或省份 : ')
        
         ###############如果输入非空,对输入进?#20449;?#26029;并转化类型###########
         if len(province_index) != 0:
          province_index = input_handle(province_index)
        
         if province_index == 'q':       ###如果输入为q,则退出程序###
          sys.exit(0)  
         elif province_index in province_dict.keys():   ###如果输入为数字编号,则从?#20540;?#20013;获取具体省份或直辖市名称###
          P_NAME = province_dict[province_index]   ###对全?#30452;?#37327;赋值省份名称###
         elif province_index in province_dict.values():  ###如果输入为具体省份,则从?#20540;?#20013;获取具体省份或直辖市名称###
          P_NAME = province_index       ###对全?#30452;?#37327;赋值省份名称###
         else:
          P_NAME = ''          ###输入其他字符,赋值全?#30452;?#37327;为空### 
        
         while P_NAME:          ###全?#30452;?#37327;不为空进行循环###
          framework(P_NAME,C_NAME,X_NAME)     ###调用框架###
          if type(yaml_dict[P_NAME]) is list:
           city_show(P_NAME)       ###调用城市函数,并传入省份值###
           if FLAG_M == 'b':       ###城市函数输入b,返回上一层,重新选择省份###
            break
          else:
           show(P_NAME)         ###调用输出展示函数### 
           time.sleep(5)
           P_NAME = ''
           break
         else:
          print('输入错误,请重新输入!')     ###P_NAME为空,即输入错误,重新输入###
          time.sleep(2)
         
        ##############菜单第二层城市输出函数#######################
        def city_show(province_name):
        
         ############申明全?#30452;?#37327;###############
         global P_NAME
         global C_NAME
         global X_NAME
         global FLAG_M
         
         city_name = ''          ###定义城市变量默认为空###
         city_list = yaml_dict[province_name]     ###定义赋值城市列表###
         city_dict = {}          ###定义城市编号和名称?#20540;?##
         city_county_dict = {}        ###定义地级市和下属区县?#20540;?##
        
         ############对城市列表参数进行遍历并加上数字编号############### 
         for k,v in enumerate(city_list,1):
          if type(v) is str:        ###直辖市只有二层菜单,第二层为直接的各区或县,值类型为具体字符###
           city_dict[k] = v        ###对直辖市下的区或县进行新?#20540;?#36171;值,方便查询和展示###
           print('%d . %s' % (k,v) + '\t',end='')  ###末尾加',',取消默认换行###
          elif type(v) is dict:       ###其他省份有三层菜单,第二层为各地级市,值类型?#20540;?##
           for kk,vv in v.items():      ###对地级市的?#20540;?#36827;行遍历###
            city_dict[k] = kk      ###对其他省份下的地级市进行新?#20540;?#36171;值,方便查询和展示### 
            city_county_dict[kk] = vv    ###对二层地级市和三层县市重新赋值新?#20540;?##    
            print('%d . %s' % (k,kk) + '\t',end='') ###加上end参数,取消默认换行### 
          else:
           pass
            
          if k % 4 == 0:         ###按4列换行###
           print()
         print('\n================================================================')
         print('q : Exit b : Back')
        
         ###############键盘读入编号或区市,可以输入汉字#################
         city_index = input('请输入编号或区市 : ')
         
         ###############如果输入非空,对输入进?#20449;?#26029;并转化类型###########
         if len(city_index) != 0:
          city_index = input_handle(city_index)
        
         if city_index == 'q':        ###如果输入为q,则退出程序###
          sys.exit(0)
         elif city_index == 'b':        ###如果输入为b,则返回上一层,重新选择省份或直辖市###
          (P_NAME,C_NAME,FLAG_M) = ('','','b')    ###全?#30452;?#37327;P_NAME,C_NAME设置为空,FLAG_M设置为b,则返回上一层###
          return           ###直接返回,不进行函数以下的操作###
         elif city_index in city_dict.keys():     ###如果输入为数字编号,则从?#20540;?#20013;获取具体城市名称###
          city_name = city_dict[city_index]    ###赋值地级市的名称,并对全?#30452;?#37327;进行赋值###
          (P_NAME,C_NAME,FLAG_M) = (province_name,city_name,'')
         elif city_index in city_dict.values():    ###如果输入为城市名称,则从?#20540;?#20013;获取具体省份名称###
          city_name = city_index       ###赋值地级市的名称,并对全?#30452;?#37327;进行赋值###
          (P_NAME,C_NAME,FLAG_M) = (province_name,city_name,'')
         else:
          pass            ###如果输入其他字符,则不做任何操作###
         
         if city_name:          ###如果地级市名字不为空,即键盘输入为要求字符###
          if city_name in city_county_dict.keys():   ###判断是省份的地级市名字### 
           while C_NAME:        ###环境变量C_NAME不为空###
            framework(P_NAME,C_NAME,X_NAME)   ###调用框架函数,并将省份名字和地级市名字传入###
        
            ###调用三层区县显示函数,并传入具体变量###
            county_show(P_NAME,C_NAME,city_county_dict[city_name]) 
            if FLAG_N == 'b':      ###三层区县函数输入b,返回上一层,重新选择地级市###
             break
           else:
            print('输入错误,请重新输入!')   ###C_NAME为空,即输入错误,重新输入###
            time.sleep(2)
          else:           ###判断是直辖市的区或县名字###
           show(P_NAME,C_NAME)       ###调用输出展示函数### 
           time.sleep(5)
         else:            ###输入非要求字符,提示重新输入###
          print('输入错误,请重新输入!')
          time.sleep(2)
          
        ##############菜单第三层区县输出函数#######################
        def county_show(province_name,city_name,county_list):
        
         ############申明全?#30452;?#37327;####################
         global P_NAME
         global C_NAME
         global X_NAME
         global FLAG_N
        
         county_name = ''          ###定义三级区县变量默认为空###
         county_dict = {}          ##定义赋值区县?#20540;?##
         
         ############对区县列表参数进行遍历并加上数字编号############### 
         for k,v in enumerate(county_list,1):     
          if type(v) is str:        ###第三层为直接的各区或县,值类型为具体字符str###
           county_dict[k] = v       ###对区或县进行新?#20540;?#36171;值,方便查询和展示###
           print('%d . %s' % (k,v) + '\t',end='')  ###加上end参数,取消默认换行### 
        
          if k % 4 == 0:         ###按4列换行###
           print()
         print('\n================================================================')
         print('q : Exit b : Back')
        
         ###############键盘读入编号或区县,可以输入汉字#################
         county_index = input('请输入编号或区县 : ')
        
         ###############如果输入非空,对输入进?#20449;?#26029;并转化类型###########
         if len(county_index) != 0:       
          county_index = input_handle(county_index)
        
         if county_index == 'q':        ###如果输入为q,则退出程序###
          sys.exit(0)
         elif county_index == 'b':       ###如果输入为b,则返回上一层,重新选择第二层地级市###
          (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,'','','b') ###全?#30452;?#37327;C_NAME设置为空,FLAG_M设置为b,则返回上一层###
          return           ###直接返回,不进行函数以下的操作### 
         elif county_index in county_dict.keys():    ###如果输入为数字编号,则从?#20540;?#20013;获取具体区县名称###
          county_name = county_dict[county_index]   ###赋值区县的名称,并对全?#30452;?#37327;进行赋值###
          (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,city_name,county_name,'')
         elif county_index in county_dict.values():   ###如果输入为区县名称,则从?#20540;?#20013;获取具体区县名称###
          county_name = county_index      ###赋值区县的名称,并对全?#30452;?#37327;进行赋值###
          (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,city_name,county_name,'')
         else:            ###如果输入其他字符,则不做任何操作### 
          (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,city_name,'','')
        
         if county_name:          ###如果区县名字不为空,即键盘输入为要求字符###
          show(P_NAME,C_NAME,X_NAME)      ###调用输出展示函数### 
          time.sleep(5)
         else:
          print('输入错误,请重新输入!')     ###输入非要求字符,提示重新输入###
          time.sleep(2)
         
        
        
        ##########################################主程序###############################
        
        ###############读取yaml格式文件#######################
        fd = open(r'G:\sicps\test\pro',encoding='utf-8')
        yaml_dict = yaml.load(fd)
        
        ###############定义全?#30452;?#37327;###########################
        P_NAME = ''            ###省份或直辖市全?#30452;?#37327;###
        C_NAME = ''            ###各省地级市或直辖市区县的全?#30452;?#37327;###
        X_NAME = ''            ###各省地级市下的区或县 全?#30452;?#37327;###
        FLAG_M = ''            ###退出菜单第二层,返回上一层循环的变量###
        FLAG_N = ''            ###退出菜单第三层,返回上一层循环的变量###
        
        ###############获取省份或直辖市的列表#################
        prov_list = yaml_dict.keys()
        
        ###############主循环开始#############################
        while True:
         framework(P_NAME,C_NAME,X_NAME)      ###调用框架函数,显示初始状态###
         province_show(prov_list)       ###调用第一层省份或直辖市输出函数###

        以上所述是小编给大家介绍的Python读取yaml文件多层菜单详解整合,希望对大家有所帮助,如果大家有任?#25105;?#38382;请给我留言,小编会及时回复大家的。在此也非常?#34892;?#22823;家对脚本之家网站的支持!

        相关文章

        最新评论

        2018白小姐一肖中特马
        <sup id="sjju3"><noscript id="sjju3"></noscript></sup>
        <big id="sjju3"></big>

      2. <blockquote id="sjju3"></blockquote>
        <blockquote id="sjju3"></blockquote>

          <td id="sjju3"></td>

          <big id="sjju3"></big>
            <code id="sjju3"><strong id="sjju3"><dl id="sjju3"></dl></strong></code>
          1. <sup id="sjju3"><noscript id="sjju3"></noscript></sup>
            <big id="sjju3"></big>

          2. <blockquote id="sjju3"></blockquote>
            <blockquote id="sjju3"></blockquote>

              <td id="sjju3"></td>

              <big id="sjju3"></big>
                <code id="sjju3"><strong id="sjju3"><dl id="sjju3"></dl></strong></code>