文件操作_菜单<代码>
info文件中的内容为:
{
"河北省": {"石家庄": {"无极县":"", "高邑县":"", "灵寿县":"", "行唐县":"", "元氏县":""},
"唐山市": {"乐亭县":"", "迁西县":"", "滦南县":"", "丰润区":"", "古冶区":""},
"邯郸市": {"大名县":"", "临漳县":"", "邯郸县":"", "肥乡县":"", "永年县":""},
"保定市": {"高阳县":"", "容城县":"", "望都县":"", "安新县":"", "顺平县":""}
},
"河南省": {"郑州市": {"中原区":"", "二七区":"", "金水区":"", "惠济区":"", "管城区":""},
"开封市": {"龙亭区":"", "鼓楼区":"", "顺河区":"", "祥符区":"", "通许县":""},
"安阳市": {"安阳县":"", "汤阴县":"", "内黄县":"", "文峰区":"", "北关区":""},
"新乡市": {"红旗区":"", "卫滨区":"", "牧野区":"", "凤泉区":"", "卫辉市":""}
},
"湖北省": {"武汉市": {"武昌区":"", "汉阳区":"", "江岸区":"", "江夏区":"", "洪山区":""},
"襄阳市": {"宜城市":"", "枣阳市":"", "樊城区":"", "襄州区":"", "南漳县":""},
"宜昌市": {"当阳市":"", "点军区":"", "西陵区":"", "猇亭区":"", "伍家岗":""},
"黄冈市": {"黄州区":"", "麻城市":"", "武穴市":"", "罗田县":"", "团风县":""},
},
}
f = open("info","r+",encoding="utf8")
a = eval(f.read()) # a点没用
menu = dict(a)
current_layer = menu # 为了动态循环,初始值为menu
f.close()
parent_layer = [] # 记录下父层,若是用一个变量来保存则back时,会原地返回
while True:
a = list(sorted(current_layer)) # 排序key保证每次都一样的排序
for i,key in enumerate(a,1):
print(i,">>>",key) # 循环打印当前层的key
chioce = input("输入序号 [q]退出 [b]返回([more]进入管理选项:)").strip()
if len(chioce) == 0:continue # 什么都没输入的时候,在打印当前层的信息
if chioce.isdigit():
chioce = int(chioce)
if 0 < chioce <= len(a):
parent_layer.append(current_layer) # * 在当前层还是子层时记录下来 因为马上它要变成父亲了
current_layer = current_layer[a[chioce-1]] # 为了下一次的循环将当前层换成用户输入的下一层
if not current_layer: # 此时当前层为空
print("已经是最后一级菜单")
elif chioce == "b": # 这一段的代码是防止回到最上一层时发生错误
if parent_layer: # 判断父层记录器是空(False)时,表示回到第一层了,回到while继续打印第一层
current_layer = parent_layer.pop() # 若是有东西时(Ture)时,原先记录的本层删除了,然后上面执行上一次记录的父层。
elif chioce == "more":
chioce_m = input("[a]添加当前信息 [d]删除当前信息 [q]退出")
if chioce_m =="a":
a_add = input("输入想添加的信息:")
current_layer.update({a_add:{}}) # 添加的是字典的嵌套,这样下次添加时仍旧是字典嵌套
elif chioce_m == "d":
a_del = int(input("输入序号"))
del current_layer[a[a_del-1]]
else:
print("无此项")
save_m = input("是否保存当前修改的信息?y or n:") # 加在这个if语句中的好处是只有more的操作后才会提示保存
if save_m == "y":
menu_str = str(menu)
f_m = open("info", "w", encoding="utf8")
f_m.write(menu_str) # 保存的方式是以写的模式打开,类似于刷新。
elif save_m == "n":
pass
else:
print("无此项")
elif chioce == "q":
break
else:
print("无此项")
文件操作_菜单<代码>的更多相关文章
- Python基本语法_文件操作_读写函数详解
目录 目录 软件环境 file文件对象 open文件操作 读文件 read读取所有文件内容 readline获取一行内容 readlines读取所有文件内容 readreadlinereadlines ...
- python文件操作_对文件进行复制拷贝_代码实现
要求: 1,对已经存在的文件进行复制操作 2,复制后的文件在文件名后面加上[复件] 3,文件比较大如何优化处理 #-*- coding: UTF-8 -*- #这是python 2 下面写的,用的ra ...
- 一个封装好的CSV文件操作C#类代码
using System.Data; using System.IO; namespace DotNet.Utilities { /// <summary> /// CSV文件转换类 // ...
- Python文件操作之简化代码
一朝误入此门中,从此红尘了如空.... 程序这条路,当真是路漫漫... 这两天找到一本书,名为<笨方法学Python第三版>,全实例,感觉挺好的.需要的点书名下载, 密码:gmpn 今天想 ...
- python开发_xml.etree.ElementTree_XML文件操作_该模块在操作XML数据是存在安全隐患_慎用
xml.etree.ElementTree模块实现了一个简单而有效的用户解析和创建XML数据的API. 在python3.3版本中,该模块进行了一些修改: xml.etree.cElementTree ...
- Qt5文件操作_保存成"UTF-8"格式
1. bool TdrawSvg::Save2File(char* _pcFullFileName) { // http://blog.csdn.net/u011314012/article/deta ...
- C# 好代码学习笔记(1):文件操作、读取文件、Debug/Trace 类、Conditional条件编译、CLS
目录 1,文件操作 2,读取文件 3,Debug .Trace类 4,条件编译 5,MethodImpl 特性 5,CLSCompliantAttribute 6,必要时自定义类型别名 目录: 1,文 ...
- JAVA中的I/O流以及文件操作
一 JAVA语言中主要通过流来完成IO操作. 流:计算机的输入输出之间流动的数据序列,也是类的对象.java中的流方式就像是建立在数据交换源和目的之间的一条通信路径. 数据源:计算机中的数据源是指可以 ...
- iOS学习之iOS沙盒(sandbox)机制和文件操作(一)
1.iOS沙盒机制 iOS应用程序仅仅能在为该改程序创建的文件系统中读取文件,不能够去其他地方訪问,此区域被成为沙盒,所以全部的非代码文件都要保存在此,比如图像,图标,声音,映像,属性列表,文本文件等 ...
随机推荐
- protected(C# 参考)
protected 关键字是一个成员访问修饰符.受保护成员在它的类中可访问并且可由派生类访问.有关 protected 与其他访问修饰符的比较,请参见可访问性级别. 仅当访问通过派生类类型发生时,基类 ...
- BZOJ4345 : [POI2016]Korale
只考虑第一问,将珠子按照价值从小到大排序,设排序后第$i$小的为$b[i]$,定义二元组$(x,y)$表示当前珠子的总价值为$x$,用的价值最大的珠子为$y$,用一个小根堆来维护所有状态.一开始往堆中 ...
- Js作用域与作用域链详解
一直对Js的作用域有点迷糊,今天偶然读到Javascript权威指南,立马被吸引住了,写的真不错.我看的是第六版本,相当的厚,大概1000多页,Js博大精深,要熟悉精通需要大毅力大功夫. 一:函数作用 ...
- java 实现数据结构之队列
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作. 1.队列的顺序存储结构及实现 public class SequenceQueue&l ...
- 提升 web 应用程序的性能(一)
提升 web 应用程序的性能,找出瓶颈,加快客户端内容的速度. 作为 web 用户,我们知道页面加载或刷新的速度对其成功至关重要.本文将帮助您更好地理解影响 web 应用程序性能的因素.学 ...
- mysql用户权限
mysql> show grants for root@'localhost';+-------------------------------------------------------- ...
- kvm快照
Kvm快照: 1.基于lvm的快照 2.kvm自带的快照功能(需要qcow2 磁盘文件才支持快照) 关闭kvm虚拟机: 查看磁盘文件信息: [root@super67 ~]# qemu-img inf ...
- hdu 3348 coins
这道题算是一道很经典的题,很好的诠释了贪心和动态规划的不同功能.求最少钱的数量用贪心就够了,但是求最多钱的数量要用到动态规划的思想,每步都尽量保留最大 数量.具体看程序注解: #include&quo ...
- 用java简单的实现单链表的基本操作
package com.tyxh.link; //节点类 public class Node { protected Node next; //指针域 protected int data;//数据域 ...
- 《Java核心技术卷二》笔记(一)流与文件
一.流的概念 在Java中,可以提供字节序列的对象,或者可以接收字节序列的对象,都可以抽象成流.系统中的文件,网络,内存这些设备都可以读入或者写入字节,自然也可以用流的方式来操作.能向程序中提供字节序 ...