【python之路】【4、文件操作】数据类型、文件操作-作业 用文件储存三级菜单并执行
1 #!/usr/bin/python2 # -*- coding: utf-8 -*-
3 # __author__:"watalo"
4 # date: 2019/9/23
5
6 '''
7 1.用文件操作的方式实现三级菜单,用户可增、删、改、查(1级1级的做)
8 2.需要用的函数:
9 str(),字典转字符串
10 eval(),字符串直接调用引号里的内容,内容是字典话,那就。。。
11 OK,let's go!
12 【idea&question:】
13 1、直接在文件里写好省、市、区名字?
14 开头就出现问题,省市区分文件写,还是写在一个文件,分文件写又应该怎么写,难道每个市都要单独命名一个文件?这TM是个问题啊
15 1.1、为了自动搞出这些名字来,我决定加一个作业,就是用for循环来写,市的名字简化成 省名_1,区名字简化为,省名_1_1这样。
16 写一个menu()函数来实现。for循环已经循环晕了。
17 2、将文件内容变成字典类型,逐渐添加形成一个大字典
18 3、用之前学的字典三级菜单(高大上版)循环。>>>>>>>>>>实现了三级菜单的‘查’功能
19 4、考虑怎么做增、删、改,基本想法是在while循环的过程中添加功能。
20 可以预期的问题,改完后,只是对字典进行了修改,【字典】中的内容怎么返还回去改【文件】。
21 '''
22
23 # 1、自动生成文件
24 def menu(a): # 用a文件里单行内容为名字,生成新文件,并且给新文件添加内容为
25 b = str(a)
26 with open(b, 'r', encoding='utf-8') as m:
27 for prov in m:
28 with open(prov.strip(), 'w', encoding='utf-8') as p: # 创建以省命名的文件
29 for i in range(1, 3):
30 city = str(prov.strip()) + '' + str(i) + '\n' # 格式化城市名称
31 p.writelines(city) # 写入格式化城市名称
32
33 menu('prov') # 生成市级文件
34 with open('prov', 'r', encoding='utf-8') as m: # 生成区级文件
35 for key in m:
36 menu(key.strip())
37
38
39 # 2、通过文件生成一个字典
40 def file_to_dict(a=str(),b={}):
41 menu_dict = dict()
42 with open(a, 'r', encoding='utf-8') as m:
43 for key in m:
44 menu_dict.setdefault(key.strip(), {})
45 return menu_dict
46
47 dict_menu = file_to_dict('prov')
48 for key in dict_menu:
49 dict_menu[key] = file_to_dict(key)
50 m = dict_menu[key]
51 for key2 in m:
52 m[key2] = file_to_dict(key2)
53
54 # 3、3级菜单循环
55 def foldedmenu(dict_menu_c):
56 # dict_menu_c = dict_menu #有预感这句话 换个名字对后面‘增删改’功能会有很大的作用
57 parent_layer = []
58 while True: # 生成一个循环loop
59 for key in dict_menu_c: # 遍历字典的键值,也就是第一层字典key
60 print(key) # 显示出来
61 choice = input('>>>:').strip() # 输入显示出来的第一层,或者 b 返回
62 if len(choice) == 0: continue # 基本判断,确保没有输入东西的时候重复
63 if choice in dict_menu_c:
64 parent_layer.append(dict_menu_c) # 当前层级的字典,直接添加到 列表里面备用
65 dict_menu_c = dict_menu_c[choice] # 循环赋值给dict_menu_c,用于进入下一个层级
66 elif choice == 'b':
67 if parent_layer: # [] 空列表 就是 False
68 dict_menu_c = parent_layer.pop() # 取出列表的最后一个值
69 elif choice == 'q':
70 print('--------END---------')
71 break
72 else:
73 print('请正确输入指令')
74
75 foldedmenu(dict_menu)
以上是 【python之路】【4、文件操作】数据类型、文件操作-作业 用文件储存三级菜单并执行 的全部内容, 来源链接: utcz.com/z/388376.html