Python3基础-查询功能
1、嵌套循环,一层一层的退出
while True: print('level') choice = input('level>>>:').strip() if choice == 'quit':break while True: print('level2') choice = input('leve2>>>:').strip() if choice == 'quit': break while True: print('level3') choice = input('leve3>>>').strip() if choice == 'quit': break
执行以上代码,结果如下:
level level>>>:11 level2 leve2>>>:22 level3 leve3>>>33 level3 leve3>>>quit level2 leve2>>>:quit level level>>>:quit
2、嵌套循环,退出一个就退出所有的循环
tag = True #标识状态 while tag: print('level') choice = input('level>>>:').strip() if choice == 'quit':break if choice == 'quit_all': tag = False while tag: print('level2') choice = input('leve2>>>:').strip() if choice == 'quit': break if choice == 'quit_all': tag = False while tag: print('level3') choice = input('leve3>>>').strip() if choice == 'quit': break if choice == 'quit_all': tag = False
执行以上代码,结果如下:
level level>>>:11 level2 leve2>>>:22 level3 leve3>>>33 level3 leve3>>>quit_all
3、查询、修改功能
import os def fetc(data): # print("\033[1;33;0m===查询=== \033[0m") # print("\033[1;33;0m用户的数据是: \033[0m",data) backend_data='backend %s' %data #print(backend_data) with open('fet.conf','r')as f: #打开fet.conf文件 tag = False #设置标识 readf_list=[] for read_line in f: #一行行的读取fet.conf文件 if read_line.strip() == backend_data: #匹配到的数据 跳过该行继续执行 tag = True continue if tag and read_line.startswith('backend'): break if tag: #print('\033[1;31;0m%s\033[0m'%read_line,end='') readf_list.append(read_line) return readf_list def add(): print("我是添加函数") """ 修改功能 用户输入的数据格式是: [{'backend':'www.baidu.com','data':{'server':'100.100.10.8','weight':'20','maxconn':30}},{'backend':'www.baidu.com','data':{'server':'100.100.10.1','weight':'200','maxconn':300}}] 将list[0]和读取文本中相同的数据修改为list[1]的数据 然后将修改后的数据写入文本中 """ def change(data): # print("\033[1;34;0m===修改=== \033[0m") # print("\033[1;34;0m用户的数据是: \033[0m", data) if data.startswith('[') and data.endswith(']'): data_list = eval(data) data = data_list[0]['backend'] backend_data = 'backend %s' % data old_server_data='%sserver %s %s weight %s maxconn %s\n'%(' '*8,data_list[0]['data']['server'], data_list[0]['data']['server'], data_list[0]['data']['weight'], data_list[0]['data']['maxconn']) new_server_data='%sserver %s %s weight %s maxconn %s\n'%(' '*8,data_list[1]['data']['server'], data_list[1]['data']['server'], data_list[1]['data']['weight'], data_list[1]['data']['maxconn']) # print('用户想要修改的记录:%s'%old_server_data) # print('用户想要修改的记录:%s' %new_server_data) fetc_data=fetc(data) # print("返回的fetc_data",fetc_data) if not fetc_data or old_server_data not in fetc_data: print('修改记录不存在') else: #print('哈哈哈 记录存在') index = fetc_data.index(old_server_data) fetc_data[index]=new_server_data #print("修改后的fetc_data",fetc_data) #print('加入新的fetc_data的数据',fetc_data) with open('fet.conf','r') as read_f,open('fet_new.conf','w') as write_f: tag = False has_write = False for read_line in read_f: if read_line.strip() == backend_data: # 匹配到的数据 跳过该行继续执行 tag = True write_f.write(read_line) continue if tag and read_line.startswith('backend'): tag = False if not tag: write_f.write(read_line) else: if not has_write: #判断是否已写 for record in fetc_data: write_f.write(record) has_write = True os.rename('fet.conf', 'fet.conf.bak') # 将文件fet.conf重新命名为fet.conf.bak os.rename('fet_new.conf', 'fet.conf') # 将文件fet_new.conf重新命名为fet.conf # os.remove('fet.conf.bak') else: return "请输入正确格式的数据。eg [{'backend':'www.baidu.com','data':{'server':'100.100.10.1','weight':'20','maxconn':30}}]" # [{'backend':'www.baidu.com','data':{'server':'100.100.10.8','weight':'20','maxconn':30}},{'backend':'www.baidu.com','data':{'server':'100.100.10.1','weight':'200','maxconn':300}}] # def delete(): print("我是删除函数") if __name__ == '__main__': msg=""" 1:查询 2:添加 3:修改 4:删除 5:退出 """ msg_dic={'1':fetc,'2':add,'3':change,'4':delete} while True: print(msg) choice=input("请输入你的选项:").strip() if not choice:continue if choice == '5':break data= input("请输入你的数据:").strip() res=msg_dic[choice](data) print(res)
4、优化文件处理
# -*- encoding: utf-8 -*- """ @File : sed_new.bak.py @Time : 2019/10/25 18:06 @Author : SuSu @Software: PyCharm """ import os def file_handle(backend_data,fetc_data=None,type='fetch'): if type == 'fetch': with open('fet.conf','r')as f: #打开fet.conf文件 tag = False #设置标识 readf_list=[] for read_line in f: #一行行的读取fet.conf文件 if read_line.strip() == backend_data: #匹配到的数据 跳过该行继续执行 tag = True continue if tag and read_line.startswith('backend'): break if tag: #print('\033[1;31;0m%s\033[0m'%read_line,end='') readf_list.append(read_line) return readf_list elif type == 'change': with open('fet.conf','r') as read_f,open('fet_new.conf','w') as write_f: tag = False has_write = False for read_line in read_f: if read_line.strip() == backend_data: # 匹配到的数据 跳过该行继续执行 tag = True write_f.write(read_line) continue if tag and read_line.startswith('backend'): tag = False if not tag: write_f.write(read_line) else: if not has_write: #判断是否已写 for record in fetc_data: write_f.write(record) has_write = True os.rename('fet.conf', 'fet.conf.bak') # 将文件fet.conf重新命名为fet.conf.bak os.rename('fet_new.conf', 'fet.conf') # 将文件fet_new.conf重新命名为fet.conf os.remove('fet.conf.bak') def fetc(data): # print("\033[1;33;0m===查询=== \033[0m") # print("\033[1;33;0m用户的数据是: \033[0m",data) backend_data='backend %s' %data #print(backend_data) return file_handle(backend_data) def add(): print("我是添加函数") """ 修改功能 用户输入的数据格式是: [{'backend':'www.baidu.com','data':{'server':'100.100.10.8','weight':'20','maxconn':30}},{'backend':'www.baidu.com','data':{'server':'100.100.10.1','weight':'200','maxconn':300}}] 将list[0]和读取文本中相同的数据修改为list[1]的数据 然后将修改后的数据写入文本中 """ def change(data): # print("\033[1;34;0m===修改=== \033[0m") # print("\033[1;34;0m用户的数据是: \033[0m", data) if data.startswith('[') and data.endswith(']'): data_list = eval(data) data = data_list[0]['backend'] backend_data = 'backend %s' % data old_server_data='%sserver %s %s weight %s maxconn %s\n'%(' '*8,data_list[0]['data']['server'], data_list[0]['data']['server'], data_list[0]['data']['weight'], data_list[0]['data']['maxconn']) new_server_data='%sserver %s %s weight %s maxconn %s\n'%(' '*8,data_list[1]['data']['server'], data_list[1]['data']['server'], data_list[1]['data']['weight'], data_list[1]['data']['maxconn']) fetc_data=fetc(data) if not fetc_data or old_server_data not in fetc_data: print('修改记录不存在') else: index = fetc_data.index(old_server_data) fetc_data[index]=new_server_data file_handle(backend_data,fetc_data,type='change') else: return "请输入正确格式的数据。eg [{'backend':'www.baidu.com','data':{'server':'100.100.10.1','weight':'20','maxconn':30}}]" # [{'backend':'www.baidu.com','data':{'server':'100.100.10.8','weight':'20','maxconn':30}},{'backend':'www.baidu.com','data':{'server':'100.100.10.1','weight':'200','maxconn':300}}] # def delete(): print("我是删除函数") if __name__ == '__main__': msg=""" 1:查询 2:添加 3:修改 4:删除 5:退出 """ msg_dic={'1':fetc,'2':add,'3':change,'4':delete} while True: print(msg) choice=input("请输入你的选项:").strip() if not choice:continue if choice == '5':break data= input("请输入你的数据:").strip() res=msg_dic[choice](data) print('最终的结果',res)
浙公网安备 33010602011771号