Python-24_综合练习-01_函数_文件处理_解耦--查询功能
--------------------------------------------- 一、查询功能:---------------------------------------------
def fetch(data): print("\033[1;43m查询功能\033[0m") # \033[1;43m---\033[0m 给---添加颜色,43代表颜色 print("\033[1;43m用户数据\033[0m",data) backend_data="backend %s" %data with open("haproxy.conf","r") as read_f: arg=False res=[] for read_line in read_f: if read_line.strip()==backend_data: arg=True continue if arg and read_line.startswith("backend"): break if arg: print("\033[1;43m%s\033[0m"%read_line,end="") res.append(read_line) return res def add(): print("添加功能") def change(): print("修改功能") def delete(): print("删除功能") msg=""" 1:查询 2:添加 3:修改 4:删除 5:退出 """ msg_dic={"1":fetch,"2":add,"3":change,"4":delete} while True: print(msg) choice=input("请输入你需要的选项:").strip() if not choice:continue if choice=="5":break data=input("请输入您的数据:").strip() msg_dic[choice](data) # 退出当前循环、退出全部循环: arg=True while arg: print("level1") choice=input("level1 >>>").strip() if choice == "quit": break if choice == "quit_all": arg = False while arg: print("level2") choice = input("level2 >>>").strip() if choice == "quit": break if choice == "quit_all": arg = False while arg: print("level3") choice = input("level3 >>>").strip() if choice == "quit": break if choice == "quit_all": arg = False
--------------------------------------------- 二、修改功能:---------------------------------------------
import os def fetch(data): print("\033[1;43m查询功能\033[0m") # \033[1;43m---\033[0m 给---添加颜色,43代表颜色 print("\033[1;43m用户数据\033[0m", data) backend_data = "backend %s" % data with open("haproxy.conf", "r") as read_f: arg = False res = [] for read_line in read_f: if read_line.strip() == backend_data: arg = True continue if arg and read_line.startswith("backend"): break if arg: print("\033[1;43m%s\033[0m" % read_line, end="") res.append(read_line) return res def add(): print("添加功能") def change(data): print("修改功能") print("用户输入数据%s" % data) backend = data[0]["backend"] # 文件当中的一条记录 backend_data="backend %s" %backend old_server_record="%sserver %s %s weight %s maxconn %s\n" %(" "*8,data[0]["record"]["server"], data[0]["record"]["server"], data[0]["record"]["weight"], data[0]["record"]["maxconn"]) new_server_record="%sserver %s %s weight %s maxconn %s\n" %(" "*8,data[1]["record"]["server"], data[1]["record"]["server"], data[1]["record"]["weight"], data[1]["record"]["maxconn"]) print("用户想要修改的记录是",old_server_record) res=fetch(backend) print("来自修改功能",res) if not res or old_server_record not in res: return "修改内容不存在" else: index=res.index(old_server_record) res[index]=new_server_record res.insert(0,"%s\n" %backend_data) with open("haproxy.conf","r") as read_f,\ open("haproxy.conf_new","w") as write_f: arg=False arg_write=False for read_line in read_f: if read_line.strip()==backend_data: arg=True continue if arg and read_line.startswith("backend"): arg=False if not arg: write_f.write(read_line) else: if not arg_write: for record in res: write_f.write(record) arg_write=True os.rename("haproxy.conf","haproxy.conf.bak") os.rename("haproxy.conf_new","haproxy.conf") os.remove("haproxy.conf.bak") def delete(): print("删除功能") msg = """ 1:查询 2:添加 3:修改 4:删除 5:退出 """ msg_dic = {"1": fetch, "2": add, "3": change, "4": delete} while True: print(msg) choice = input("请输入你需要的选项:").strip() if not choice: continue if choice == "5": break data = input("请输入您的数据:").strip() if choice != "1": data = eval(data) res = msg_dic[choice](data) print(res) # data --->> [{"backend":"www.newmet1.top","record":{"server":"2.2.2.5","weight":"30","maxconn":"4000"}},{"backend":"www.newmet1.top","record":{"server":"2.2.2.4","weight":"20","maxconn":"3000"}}] # 查询和修改功能,代码都涉及到文件处理的操作,可以单独定义一个函数,用来处理文件的操作!!
------------------------------------ 二、修改功能--程序的解耦:-------------------------------------
import os def file_handle(backend_data,res=None,type="fetch"): if type=="fetch": with open("haproxy.conf", "r") as read_f: tag = False res = [] for read_line in read_f: if read_line.strip() == backend_data: tag = True continue if tag and read_line.startswith("backend"): break if tag: print("\033[1;43m%s\033[0m" % read_line, end="") res.append(read_line) return res elif type == "change": with open("haproxy.conf", "r") as read_f, \ open("haproxy.conf_new", "w") as write_f: tag = False tag_write = False for read_line in read_f: if read_line.strip() == backend_data: tag = True continue if tag and read_line.startswith("backend"): tag = False if not tag: write_f.write(read_line) else: if not tag_write: for record in res: write_f.write(record) tag_write = True os.rename("haproxy.conf", "haproxy.conf.bak") os.rename("haproxy.conf_new", "haproxy.conf") os.remove("haproxy.conf.bak") def fetch(data): # print("\033[1;43m查询功能\033[0m") # \033[1;43m---\033[0m 给---添加颜色,43代表颜色 # print("\033[1;43m用户数据\033[0m", data) backend_data = "backend %s" % data return file_handle(backend_data) def add(): print("添加功能") def change(data): print("修改功能") print("用户输入数据%s" % data) backend = data[0]["backend"] # 文件当中的一条记录 backend_data="backend %s" %backend old_server_record="%sserver %s %s weight %s maxconn %s\n" %(" "*8,data[0]["record"]["server"], data[0]["record"]["server"], data[0]["record"]["weight"], data[0]["record"]["maxconn"]) new_server_record="%sserver %s %s weight %s maxconn %s\n" %(" "*8,data[1]["record"]["server"], data[1]["record"]["server"], data[1]["record"]["weight"], data[1]["record"]["maxconn"]) print("用户想要修改的记录是",old_server_record) res=fetch(backend) print("来自修改功能",res) if not res or old_server_record not in res: return "修改内容不存在" else: index=res.index(old_server_record) res[index]=new_server_record res.insert(0,"%s\n" %backend_data) file_handle(backend_data,res=res,type="change") def delete(): print("删除功能") msg = """ 1:查询 2:添加 3:修改 4:删除 5:退出 """ msg_dic = {"1": fetch, "2": add, "3": change, "4": delete} while True: print(msg) choice = input("请输入你需要的选项:").strip() if not choice: continue if choice == "5": break data = input("请输入您的数据:").strip() if choice != "1": data = eval(data) res = msg_dic[choice](data) print(res) # data --->> [{"backend":"www.newmet1.top","record":{"server":"2.2.2.5","weight":"30","maxconn":"4000"}},{"backend":"www.newmet1.top","record":{"server":"2.2.2.4","weight":"20","maxconn":"3000"}}] # 查询和修改功能,代码都涉及到文件处理的操作,可以单独定义一个函数,用来处理文件的操作!!