1 #!/usr/bin/python34

2 importsys,os,re,yaml,time3 #reload(sys)

4 #sys.setdefaultencoding('utf-8')

5

6 ######################对input输入字符类型判断并转化#####################

7 definput_handle(s):8 if str.isdigit(s): ###对输入是否是数字进行判断

9 s = int(s) ###如果输出的是个数字,则转化为整数类型

10 returns11

12 #try:

13 #eval(s) ###eval将字符串str当成有效的表达式来求值并返回计算结果

14 #except NameError: ###名称错误

15 #return s

16 #except SyntaxError: ###语法错误

17 #return s

18 #else:

19 #return eval(s)

20

21

22 ####################框架函数######################

23 def framework(province='',city='',county=''):24 os.system('cls') ###清屏###

25 print('''

26 ******************************************************************27 * *28 * 欢迎访问全国省市查询系统 *29 * *30 ******************************************************************31

32

33 +-----------------------------------------------------------------34 | 省份: %s35 |36 | 市(区): %s37 |38 | 县(区): %s39 +-----------------------------------------------------------------40 ''' %(province,city,county))41

42 ######################输出展示函数#################

43 def show(province_name='',city_name='',county_name=''):44 output= '''

45 ******************************************************************46 * *47 美丽的%s %s %s48 * 欢迎您 *49 这里的山美,水美,妹子更美50 * *51 ******************************************************************52 '''

53 print(output %(province_name,city_name,county_name))54

55

56 ###################菜单第一层省份或直辖市输出函数#################

57 defprovince_show(province_list):58

59 ############申明全局变量####################

60 globalP_NAME61 globalC_NAME62 globalX_NAME63 globalFLAG_M64

65 province_dict ={}66 ############对省份或直辖市列表参数进行遍历并加上数字编号###############

67 for k,v in enumerate(province_list,1):68 province_dict[k] =v69 print('%d . %s' % (k,v) + '\t',end='') ###加上end参数,取消默认换行###

70 if k % 4 == 0: ###按4列换行###

71 print()72 print('\n================================================================')73 print('q : Exit')74

75 ###############键盘读入编号或省份,可以输入汉字#################

76 province_index = input('请输入编号或省份 :')77

78 ###############如果输入非空,对输入进行判断并转化类型###########

79 if len(province_index) !=0:80 province_index =input_handle(province_index)81

82 if province_index == 'q': ###如果输入为q,则退出程序###

83 sys.exit(0)84 elif province_index in province_dict.keys(): ###如果输入为数字编号,则从字典中获取具体省份或直辖市名称###

85 P_NAME = province_dict[province_index] ###对全局变量赋值省份名称###

86 elif province_index in province_dict.values(): ###如果输入为具体省份,则从字典中获取具体省份或直辖市名称###

87 P_NAME = province_index ###对全局变量赋值省份名称###

88 else:89 P_NAME = '' ###输入其他字符,赋值全局变量为空###

90

91 while P_NAME: ###全局变量不为空进行循环###

92 framework(P_NAME,C_NAME,X_NAME) ###调用框架###

93 if type(yaml_dict[P_NAME]) islist:94 city_show(P_NAME) ###调用城市函数,并传入省份值###

95 if FLAG_M == 'b': ###城市函数输入b,返回上一层,重新选择省份###

96 break

97 else:98 show(P_NAME) ###调用输出展示函数###

99 time.sleep(5)100 P_NAME = ''

101 break

102 else:103 print('输入错误,请重新输入!') ###P_NAME为空,即输入错误,重新输入###

104 time.sleep(2)105

106 ##############菜单第二层城市输出函数#######################

107 defcity_show(province_name):108

109 ############申明全局变量###############

110 globalP_NAME111 globalC_NAME112 globalX_NAME113 globalFLAG_M114

115 city_name = '' ###定义城市变量默认为空###

116 city_list = yaml_dict[province_name] ###定义赋值城市列表###

117 city_dict = {} ###定义城市编号和名称字典###

118 city_county_dict = {} ###定义地级市和下属区县字典###

119

120 ############对城市列表参数进行遍历并加上数字编号###############

121 for k,v in enumerate(city_list,1):122 if type(v) is str: ###直辖市只有二层菜单,第二层为直接的各区或县,值类型为具体字符###

123 city_dict[k] = v ###对直辖市下的区或县进行新字典赋值,方便查询和展示###

124 print('%d . %s' % (k,v) + '\t',end='') ###末尾加',',取消默认换行###

125 elif type(v) is dict: ###其他省份有三层菜单,第二层为各地级市,值类型字典###

126 for kk,vv in v.items(): ###对地级市的字典进行遍历###

127 city_dict[k] = kk ###对其他省份下的地级市进行新字典赋值,方便查询和展示###

128 city_county_dict[kk] = vv ###对二层地级市和三层县市重新赋值新字典###

129 print('%d . %s' % (k,kk) + '\t',end='') ###加上end参数,取消默认换行###

130 else:131 pass

132

133 if k % 4 == 0: ###按4列换行###

134 print()135 print('\n================================================================')136 print('q : Exit b : Back')137

138 ###############键盘读入编号或区市,可以输入汉字#################

139 city_index = input('请输入编号或区市 :')140

141 ###############如果输入非空,对输入进行判断并转化类型###########

142 if len(city_index) !=0:143 city_index =input_handle(city_index)144

145 if city_index == 'q': ###如果输入为q,则退出程序###

146 sys.exit(0)147 elif city_index == 'b': ###如果输入为b,则返回上一层,重新选择省份或直辖市###

148 (P_NAME,C_NAME,FLAG_M) = ('','','b') ###全局变量P_NAME,C_NAME设置为空,FLAG_M设置为b,则返回上一层###

149 return ###直接返回,不进行函数以下的操作###

150 elif city_index in city_dict.keys(): ###如果输入为数字编号,则从字典中获取具体城市名称###

151 city_name = city_dict[city_index] ###赋值地级市的名称,并对全局变量进行赋值###

152 (P_NAME,C_NAME,FLAG_M) = (province_name,city_name,'')153 elif city_index in city_dict.values(): ###如果输入为城市名称,则从字典中获取具体省份名称###

154 city_name = city_index ###赋值地级市的名称,并对全局变量进行赋值###

155 (P_NAME,C_NAME,FLAG_M) = (province_name,city_name,'')156 else:157 pass ###如果输入其他字符,则不做任何操作###

158

159 if city_name: ###如果地级市名字不为空,即键盘输入为要求字符###

160 if city_name in city_county_dict.keys(): ###判断是省份的地级市名字###

161 while C_NAME: ###环境变量C_NAME不为空###

162 framework(P_NAME,C_NAME,X_NAME) ###调用框架函数,并将省份名字和地级市名字传入###

163

164 ###调用三层区县显示函数,并传入具体变量###

165 county_show(P_NAME,C_NAME,city_county_dict[city_name])166 if FLAG_N == 'b': ###三层区县函数输入b,返回上一层,重新选择地级市###

167 break

168 else:169 print('输入错误,请重新输入!') ###C_NAME为空,即输入错误,重新输入###

170 time.sleep(2)171 else: ###判断是直辖市的区或县名字###

172 show(P_NAME,C_NAME) ###调用输出展示函数###

173 time.sleep(5)174 else: ###输入非要求字符,提示重新输入###

175 print('输入错误,请重新输入!')176 time.sleep(2)177

178 ##############菜单第三层区县输出函数#######################

179 defcounty_show(province_name,city_name,county_list):180

181 ############申明全局变量####################

182 globalP_NAME183 globalC_NAME184 globalX_NAME185 globalFLAG_N186

187 county_name = '' ###定义三级区县变量默认为空###

188 county_dict = {} ##定义赋值区县字典###

189

190 ############对区县列表参数进行遍历并加上数字编号###############

191 for k,v in enumerate(county_list,1):192 if type(v) is str: ###第三层为直接的各区或县,值类型为具体字符str###

193 county_dict[k] = v ###对区或县进行新字典赋值,方便查询和展示###

194 print('%d . %s' % (k,v) + '\t',end='') ###加上end参数,取消默认换行###

195

196 if k % 4 == 0: ###按4列换行###

197 print()198 print('\n================================================================')199 print('q : Exit b : Back')200

201 ###############键盘读入编号或区县,可以输入汉字#################

202 county_index = input('请输入编号或区县 :')203

204 ###############如果输入非空,对输入进行判断并转化类型###########

205 if len(county_index) !=0:206 county_index =input_handle(county_index)207

208 if county_index == 'q': ###如果输入为q,则退出程序###

209 sys.exit(0)210 elif county_index == 'b': ###如果输入为b,则返回上一层,重新选择第二层地级市###

211 (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,'','','b') ###全局变量C_NAME设置为空,FLAG_M设置为b,则返回上一层###

212 return ###直接返回,不进行函数以下的操作###

213 elif county_index in county_dict.keys(): ###如果输入为数字编号,则从字典中获取具体区县名称###

214 county_name = county_dict[county_index] ###赋值区县的名称,并对全局变量进行赋值###

215 (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,city_name,county_name,'')216 elif county_index in county_dict.values(): ###如果输入为区县名称,则从字典中获取具体区县名称###

217 county_name = county_index ###赋值区县的名称,并对全局变量进行赋值###

218 (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,city_name,county_name,'')219 else: ###如果输入其他字符,则不做任何操作###

220 (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,city_name,'','')221

222 if county_name: ###如果区县名字不为空,即键盘输入为要求字符###

223 show(P_NAME,C_NAME,X_NAME) ###调用输出展示函数###

224 time.sleep(5)225 else:226 print('输入错误,请重新输入!') ###输入非要求字符,提示重新输入###

227 time.sleep(2)228

229

230

231 ##########################################主程序###############################

232

233 ###############读取yaml格式文件#######################

234 fd = open(r'G:\sicps\test\pro',encoding='utf-8')235 yaml_dict =yaml.load(fd)236

237 ###############定义全局变量###########################

238 P_NAME = '' ###省份或直辖市全局变量###

239 C_NAME = '' ###各省地级市或直辖市区县的全局变量###

240 X_NAME = '' ###各省地级市下的区或县 全局变量###

241 FLAG_M = '' ###退出菜单第二层,返回上一层循环的变量###

242 FLAG_N = '' ###退出菜单第三层,返回上一层循环的变量###

243

244 ###############获取省份或直辖市的列表#################

245 prov_list =yaml_dict.keys()246

247 ###############主循环开始#############################

248 whileTrue:249 framework(P_NAME,C_NAME,X_NAME) ###调用框架函数,显示初始状态###

250 province_show(prov_list) ###调用第一层省份或直辖市输出函数###

python 读取多个yaml文件_Python读取yaml文件多层菜单相关推荐

  1. python不同数据的读入_python读写不同编码txt文件_python读写txt文件

    python读写不同编码txt文件_python读写txt文件 以后整理规范 [python] view plaincopy import os import codecs filenames=os. ...

  2. python 读取yml文件_Python 读取 yaml 配置文件 | 文艺数学君

    摘要这一篇介绍 Python 中使用 yaml 的方式加载配置文件,包含关于 pyyaml 的简单使用,读入和写入配置文件. 简介 之前我们介绍过使用 configparser 来读取配置文件(Pyt ...

  3. python 读取yml文件_python读取yaml配置文件

    什么是yaml 1.yaml [ˈjæməl]: Yet Another Markup Language :另一种标记语言.yaml 是专门用来写配置文件的语言,非常简洁和强大, 2.支持多种语言:p ...

  4. python yaml配置文件_python读取yaml配置文件

    支持多种语言:python.js.golang.java.c.c++ YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写.它实质上是一种通用的数据串行化格式. 它的基本语法规则如下 ...

  5. python生成表格文件_python 读取excel文件生成sql文件实例详解

    python 读取excel文件生成sql文件实例详解 学了python这么久,总算是在工作中用到一次.这次是为了从excel文件中读取数据然后写入到数据库中.这个逻辑用java来写的话就太重了,所以 ...

  6. python 读取大文件_Python读取大文件

    1. 前言 前几天在做日志分析系统,需要处理几十G的文件,我尝试用原来的for line in open(filepath).readlines()处理,但停顿好久也没变化,可见占用不小的内存.在网上 ...

  7. python读写xlsx文件_python读写Excel文件--使用xlrd模块读取,xlwt模块写入

    一.安装xlrd模块和xlwt模块 1. 下载xlrd模块和xlwt模块 到python官网http://pypi.python.org/pypi/xlrd下载模块.下载的文件例如:xlrd-0.9. ...

  8. python dialect='excel'是什么意思_python读取和生成excel文件

    今天来看一下如何使用python处理excel文件,处理excel文件是在工作中经常用到的,python为我们考虑到了这一点,python中本身就自带csv模块... 今天来看一下如何使用python ...

  9. python读取写入文件_Python读取文件,写入文件,打开文件,删除文件,复制文件

    python读取写入文件 In this tutorial we are going to learn about Python File Operations such as python read ...

  10. python读取excel内容和写入_Python读取和写入Excel文件

    制作Excel表 常用方法说明 Workbook类 Workbook类创建一个XlswWrite的Workbook对象,相当于创建一个excel表 And_worksheet()用来创建工作表,默认为 ...

最新文章

  1. JCR:曝气生物滤池处理焦化废水过程中N2O和NO的产生机理与群落功能研究
  2. 前后端分离项目部署上线详细教程
  3. 经典数学书目、各数学分支入门清单
  4. MySQL 存储过程参数IN OUT INOUT区别
  5. android airplay工具开发,Android AirPin/AirPlay手机版使用图文教程
  6. Maya 交互式播放
  7. 互联网程序员普遍都是年薪百万嘛?
  8. IDEA中大小写切换
  9. 分析加工贸易企业三帐难以平衡的根本原因
  10. 《那一世》——仓央嘉措
  11. 学好算法,有三重境界
  12. aizu/aoj-0118-Property Distribution
  13. 小空间大精彩!Apple Watch重磅实战案例之QQ空间
  14. 猜硬币游戏(c++语言)
  15. 综合计算机工时,计算机工时定额支持系统地研究.pdf
  16. 写一下考完nisp一级的感受
  17. Glassfish4第一次远程访问报错Secure Admin must be enabled to access the DAS remotely
  18. 不要再把 pp 写成 % 了。
  19. 掌握了这 10 款开源安全工具,从此系统稳定可靠乐无忧!
  20. table合并列,一对多的展示。

热门文章

  1. miniUI合并居中详解
  2. 区块链游戏赌的是整个赛道,而不是某款游戏
  3. 社招面经: 联易融Java开发一面2021.04.15
  4. 前端实现五子棋小游戏1(本地双人对战)
  5. 计算机视觉-相机参数标定
  6. 视频中时标(timeScale)、时基(timeBase)、时间戳(pts)的概念
  7. 【蓝桥杯嵌入式】蓝桥杯嵌入式第十四届省赛程序真题,真题分析与代码讲解
  8. 超微ipmi遇到问题,求高手指点
  9. Python实现excel统计排序输出,生成统计分布直方图
  10. 10个简单易学的AI计算机视觉开源项目,新手入门!