侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

详解Python读取yaml文件多层菜单

Python  /  管理员 发布于 7年前   152

需要用到的Python知识点

  1. Python的对象属性方法;
  2. 用到字典{key:value}值的提取;
  3. 列表的增加;
  4. if循环结合break的使用;
  5. yaml文件读取;

代码如下:

#!/usr/bin/python34import sys,os,re,yaml,time#reload(sys)#sys.setdefaultencoding('utf-8') ######################对input输入字符类型判断并转化#####################def input_handle(s): if str.isdigit(s):     ###对输入是否是数字进行判断  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('''*******************************************************************    **      欢迎访问全国省市查询系统     **    *******************************************************************+-----------------------------------------------------------------|   省份: %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):  ############申明全局变量#################### 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('请输入编号或省份 : ') ###############如果输入非空,对输入进行判断并转化类型########### 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():   ###如果输入为数字编号,则从字典中获取具体省份或直辖市名称###  P_NAME = province_dict[province_index]   ###对全局变量赋值省份名称### elif province_index in province_dict.values():  ###如果输入为具体省份,则从字典中获取具体省份或直辖市名称###  P_NAME = province_index       ###对全局变量赋值省份名称### else:  P_NAME = ''          ###输入其他字符,赋值全局变量为空###  while P_NAME:          ###全局变量不为空进行循环###  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): ############申明全局变量############### global P_NAME global C_NAME global X_NAME global FLAG_M  city_name = ''          ###定义城市变量默认为空### city_list = yaml_dict[province_name]     ###定义赋值城市列表### city_dict = {}          ###定义城市编号和名称字典### city_county_dict = {}        ###定义地级市和下属区县字典### ############对城市列表参数进行遍历并加上数字编号###############  for k,v in enumerate(city_list,1):  if type(v) is str:        ###直辖市只有二层菜单,第二层为直接的各区或县,值类型为具体字符###   city_dict[k] = v        ###对直辖市下的区或县进行新字典赋值,方便查询和展示###   print('%d . %s' % (k,v) + '\t',end='')  ###末尾加',',取消默认换行###  elif type(v) is dict:       ###其他省份有三层菜单,第二层为各地级市,值类型字典###   for kk,vv in v.items():      ###对地级市的字典进行遍历###    city_dict[k] = kk      ###对其他省份下的地级市进行新字典赋值,方便查询和展示###     city_county_dict[kk] = vv    ###对二层地级市和三层县市重新赋值新字典###        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('请输入编号或区市 : ')  ###############如果输入非空,对输入进行判断并转化类型########### 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')    ###全局变量P_NAME,C_NAME设置为空,FLAG_M设置为b,则返回上一层###  return           ###直接返回,不进行函数以下的操作### elif city_index in city_dict.keys():     ###如果输入为数字编号,则从字典中获取具体城市名称###  city_name = city_dict[city_index]    ###赋值地级市的名称,并对全局变量进行赋值###  (P_NAME,C_NAME,FLAG_M) = (province_name,city_name,'') elif city_index in city_dict.values():    ###如果输入为城市名称,则从字典中获取具体省份名称###  city_name = city_index       ###赋值地级市的名称,并对全局变量进行赋值###  (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): ############申明全局变量#################### global P_NAME global C_NAME global X_NAME global FLAG_N county_name = ''          ###定义三级区县变量默认为空### county_dict = {}          ##定义赋值区县字典###  ############对区县列表参数进行遍历并加上数字编号###############  for k,v in enumerate(county_list,1):       if type(v) is str:        ###第三层为直接的各区或县,值类型为具体字符str###   county_dict[k] = v       ###对区或县进行新字典赋值,方便查询和展示###   print('%d . %s' % (k,v) + '\t',end='')  ###加上end参数,取消默认换行###   if k % 4 == 0:         ###按4列换行###   print() print('\n================================================================') print('q : Exit b : Back') ###############键盘读入编号或区县,可以输入汉字################# county_index = input('请输入编号或区县 : ') ###############如果输入非空,对输入进行判断并转化类型########### 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') ###全局变量C_NAME设置为空,FLAG_M设置为b,则返回上一层###  return           ###直接返回,不进行函数以下的操作###  elif county_index in county_dict.keys():    ###如果输入为数字编号,则从字典中获取具体区县名称###  county_name = county_dict[county_index]   ###赋值区县的名称,并对全局变量进行赋值###  (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,city_name,county_name,'') elif county_index in county_dict.values():   ###如果输入为区县名称,则从字典中获取具体区县名称###  county_name = county_index      ###赋值区县的名称,并对全局变量进行赋值###  (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)###############定义全局变量###########################P_NAME = ''###省份或直辖市全局变量###C_NAME = ''###各省地级市或直辖市区县的全局变量###X_NAME = ''###各省地级市下的区或县 全局变量###FLAG_M = ''###退出菜单第二层,返回上一层循环的变量###FLAG_N = ''###退出菜单第三层,返回上一层循环的变量##################获取省份或直辖市的列表#################prov_list = yaml_dict.keys()###############主循环开始#############################while True: framework(P_NAME,C_NAME,X_NAME)      ###调用框架函数,显示初始状态### province_show(prov_list)       ###调用第一层省份或直辖市输出函数###

以上所述是小编给大家介绍的Python读取yaml文件多层菜单详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!


  • 上一条:
    Python for循环与range函数的使用详解
    下一条:
    详解Python数据分析--Pandas知识点
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客