文件操作_菜单<代码>

info文件中的内容为:

{    "河北省": {"石家庄": {"无极县":"", "高邑县":"", "灵寿县":"", "行唐县":"", "元氏县":""},             "唐山市": {"乐亭县":"", "迁西县":"", "滦南县":"", "丰润区":"", "古冶区":""},             "邯郸市": {"大名县":"", "临漳县":"", "邯郸县":"", "肥乡县":"", "永年县":""},             "保定市": {"高阳县":"", "容城县":"", "望都县":"", "安新县":"", "顺平县":""}             },    "河南省": {"郑州市": {"中原区":"", "二七区":"", "金水区":"", "惠济区":"", "管城区":""},             "开封市": {"龙亭区":"", "鼓楼区":"", "顺河区":"", "祥符区":"", "通许县":""},             "安阳市": {"安阳县":"", "汤阴县":"", "内黄县":"", "文峰区":"", "北关区":""},             "新乡市": {"红旗区":"", "卫滨区":"", "牧野区":"", "凤泉区":"", "卫辉市":""}             },    "湖北省": {"武汉市": {"武昌区":"", "汉阳区":"", "江岸区":"", "江夏区":"", "洪山区":""},             "襄阳市": {"宜城市":"", "枣阳市":"", "樊城区":"", "襄州区":"", "南漳县":""},             "宜昌市": {"当阳市":"", "点军区":"", "西陵区":"", "猇亭区":"", "伍家岗":""},             "黄冈市": {"黄州区":"", "麻城市":"", "武穴市":"", "罗田县":"", "团风县":""},             },     }
 1 f = open("info","r+",encoding="utf8")
 2 a = eval(f.read())    # a点没用
 3 menu = dict(a)
 4 current_layer = menu                           # 为了动态循环,初始值为menu
 5 f.close()
 6 parent_layer = []  # 记录下父层,若是用一个变量来保存则back时,会原地返回
 7
 8 while True:
 9     a = list(sorted(current_layer))                     # 排序key保证每次都一样的排序
10     for i,key in enumerate(a,1):
11         print(i,">>>",key)                             # 循环打印当前层的key
12     chioce = input("输入序号 [q]退出 [b]返回([more]进入管理选项:)").strip()
13     if len(chioce) == 0:continue             # 什么都没输入的时候,在打印当前层的信息
14     if chioce.isdigit():
15         chioce = int(chioce)
16         if 0 < chioce <= len(a):
17             parent_layer.append(current_layer)      # *  在当前层还是子层时记录下来 因为马上它要变成父亲了
18             current_layer = current_layer[a[chioce-1]]  # 为了下一次的循环将当前层换成用户输入的下一层
19             if not current_layer:                    # 此时当前层为空
20                 print("已经是最后一级菜单")
21     elif chioce == "b":                       # 这一段的代码是防止回到最上一层时发生错误
22         if parent_layer:                        # 判断父层记录器是空(False)时,表示回到第一层了,回到while继续打印第一层
23             current_layer = parent_layer.pop()  # 若是有东西时(Ture)时,原先记录的本层删除了,然后上面执行上一次记录的父层。
24     elif chioce == "more":
25         chioce_m = input("[a]添加当前信息 [d]删除当前信息 [q]退出")
26         if chioce_m =="a":
27             a_add = input("输入想添加的信息:")
28             current_layer.update({a_add:{}})           # 添加的是字典的嵌套,这样下次添加时仍旧是字典嵌套
29         elif chioce_m == "d":
30             a_del = int(input("输入序号"))
31             del current_layer[a[a_del-1]]
32         else:
33             print("无此项")
34         save_m = input("是否保存当前修改的信息?y or n:")  # 加在这个if语句中的好处是只有more的操作后才会提示保存
35         if save_m == "y":
36             menu_str = str(menu)
37             f_m = open("info", "w", encoding="utf8")
38             f_m.write(menu_str)                               # 保存的方式是以写的模式打开,类似于刷新。
39         elif save_m == "n":
40             pass
41         else:
42             print("无此项")
43     elif chioce == "q":
44         break
45     else:
46         print("无此项")
时间: 2024-11-06 07:35:24

文件操作_菜单<代码>的相关文章

python文件操作_对文件进行复制拷贝_代码实现

要求: 1,对已经存在的文件进行复制操作 2,复制后的文件在文件名后面加上[复件] 3,文件比较大如何优化处理 1 #-*- coding: UTF-8 -*- 2 #这是python 2 下面写的,用的raw_input 3 #old_file_name用来接收输入的文件名 4 old_file_name = raw_input('请输入要复制的文件名:') 5 #打开输入的文件 6 old_file = open(old_file_name,'r') 7 8 #对新文件的名字进行处理,在后缀

HDFS的文件操作(Java代码实现)

对于hdfs的操作,可以使用hadoop fs 的命令,同时也可以使用java来进行操作,下面的一段小例子,就是简单介绍了java操作hdfs的文件等...... package com.hdfs.nefu; /** * @auther XD **/ import java.io.FileInputStream; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import

一个封装好的CSV文件操作C#类代码

using System.Data; using System.IO; namespace DotNet.Utilities { /// <summary> /// CSV文件转换类 /// </summary> public static class CsvHelper { /// <summary> /// 导出报表为Csv /// </summary> /// <param name="dt">DataTable<

Python文件操作之简化代码

一朝误入此门中,从此红尘了如空.... 程序这条路,当真是路漫漫... 这两天找到一本书,名为<笨方法学Python第三版>,全实例,感觉挺好的.需要的点书名下载, 密码:gmpn 今天想说的是习题17,先看书中源码: 1 from sys import argv 2 from os.path import exists 3 script, from_file, to_file = argv 4 print "Copying from %s to %s" % (from_f

文件操作_用户登陆问题

# username = input("please enter your name:")# passport = input("please enter your passport:") # with open("list of info",mode="w", encoding="utf-8" ) as f:# f.write("{}\n{}".format(username,pass

JAVA中的I/O流以及文件操作

一 JAVA语言中主要通过流来完成IO操作. 流:计算机的输入输出之间流动的数据序列,也是类的对象.java中的流方式就像是建立在数据交换源和目的之间的一条通信路径. 数据源:计算机中的数据源是指可以提供数据的地方,包括键盘,磁盘文件,网络接口等. 输入流:从程序外部传向程序的流.输入流只能从中读数据. 输出流: 从程序传到外部的流.输出流只能向其写入数据. 所谓的输入和输出是以程序为中心的,数据流向程序即输入流,数据从程序中流出即输出流. 二 字节流 字节流是以字节为传输单位的数据读写形式,用

iOS学习之iOS沙盒(sandbox)机制和文件操作(一)

1.iOS沙盒机制 iOS应用程序仅仅能在为该改程序创建的文件系统中读取文件,不能够去其他地方訪问,此区域被成为沙盒,所以全部的非代码文件都要保存在此,比如图像,图标,声音,映像,属性列表,文本文件等. 1.1.每一个应用程序都有自己的存储空间 1.2.应用程序不能翻过自己的围墙去訪问别的存储空间的内容 1.3.应用程序请求的数据都要通过权限检測,假如不符合条件的话,不会被放行.     通过这张图仅仅能从表层上理解sandbox是一种安全体系,应用程序的全部操作都要通过这个体系来运行,当中核心

python成长之路第三篇(4)_作用域,递归,模块,内置模块(os,ConfigParser,hashlib),with文件操作

打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.作用域 2.递归 3.模块介绍 4.内置模块-OS 5.内置模块-ConfigParser 6.内置模块-hashlib 7.with文件操作 代码执行环境默认为3.5.1 一.作用域 (1)什么是作用域,官方来说作用域就是就是有不同的命名空间,就像下面的代码一样,a=1它的作用域是全局的,也在全局的命名空间当中,当函数 action中的a=2它就在局部的作用域中,也在局部的命名空间当中. a = 1def

.Net常用技巧_目录与文件操作

using System; using System.Collections.Generic; using System.Text; using System.IO; namespace MyTool { public class FileOperator { /// <summary> /// 返回指定目录下所有文件信息 /// </summary> /// <param name="strDirectory">目录字符串</param>