思维还有点乱,撸代码到深夜,先上代码吧.(我是跟着武sir的思路的)
流程图:
代码(有注释):
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import json,os 4 def login(): 5 flag = False 6 while True: 7 username = input("Please enter a user name:") 8 l = open('name_lock.txt','r') 9 for lline in l.readlines(): 10 lline = lline.strip() 11 if username == lline: 12 print("账号被锁") 13 flag = True 14 break 15 if flag == True: 16 break 17 #while True: 18 u = open('name.txt','r') 19 for uline in u.readlines(): 20 user,password,mony = uline.strip().split(':') 21 #print(user) 22 23 if username == user: 24 25 i = 0 26 while i < 3: 27 passwd = input('Please enter a password:') 28 i +=1 29 30 if passwd == password: 31 print('欢迎%s登陆管理平台' % username) 32 flag = True 33 break 34 35 else: 36 if i >= 3: 37 with open('name_lock.txt','a') as l_2: 38 l_2.write(username + '\n') 39 exit("试了太多次,将被锁定,请联系管理员") 40 print('密码输入错误,还有%d次机会' % (3 - i)) 41 break 42 else: 43 print("用户输入错误,请重新输入") 44 if flag == True: 45 break 46 47 def chazhao(backend): 48 cz_list = [] 49 flag = False 50 with open('ha.txt','r') as cz_1: #打开旧配置文件 51 for line in cz_1: 52 cz_line = line.strip() 53 if cz_line == "backend %s" % backend: #如果读取出的行等于输入的backend 54 flag = True 55 continue 56 if flag == True and cz_line.startswith('backend'): #如果flag=True并且行开头为backend 57 break 58 if flag == True and cz_line.startswith('server'): #如果flag= True并且行开头为server 59 cz_list.append(cz_line) 60 return cz_list 61 62 def add_1(dict_info): 63 backend_title = dict_info.get('backend') 64 crrent_title = "backend %s" %backend_title 65 crrent_record = "server %s %s weight %s maxconn %s" %(dict_info['record']['server'], dict_info['record']['server'], dict_info['record']['weight'], dict_info['record']['maxconn']) 66 cz_list = chazhao(backend_title) 67 if cz_list: 68 #backend存在 69 if crrent_record in cz_list: #如果新的数据在旧的配置文件中 70 pass #不操作 71 else: #否则,进行以下操作 72 cz_list.append(crrent_record) #插入数据 73 #处理完成之后的中间部分 74 #读取旧配置文件,写入新的配置文件中 75 #边读边写 76 #新处理后的配置文件写入新的配置文件中 77 flag = False 78 flag_1 = False 79 with open('ha.txt','r') as ha_1,open('ha_new.txt','w') as ha_2: #打开旧配置文件,打开新配置文件 80 for line in ha_1: 81 if line.strip() == crrent_title: #如果读取的行等于输入的backend 82 flag = True 83 ha_2.write(line) #将读取的行写入新文件 84 continue #重新进行循环 85 if flag == True and line.startswith('backend'): #如果标志位等于True并且此行开头为‘backend’ 86 flag = False #设置标志位为False(因为循环到了下一个‘backend’) 87 if flag == True and line.startswith('server'): #把已经处理完的数据,写入新配置文件中 88 if not flag_1: 89 for nwe_line in cz_list: 90 temp = ("\t"+nwe_line + "\n") 91 ha_2.write(temp.expandtabs()) #将新的数据按行写入新配置文件中 92 flag_1 = True 93 else: 94 ha_2.write(line) 95 else: 96 #backend不存在,添加记录和backend 97 with open('ha.txt','r') as ha_1,open('ha_new.txt','w') as ha_2: 98 for line in ha_1: 99 ha_2.write(line) 100 ha_2.write("\n" + crrent_title + "\n") 101 temp = ("\t"+crrent_record + "\n") 102 ha_2.write(temp.expandtabs()) 103 os.rename("ha.txt","ha.txt.back") #将旧配置文件备份 104 os.rename("ha_new.txt","ha.txt") #将新配置文件命名为线上使用的文件名 105 os.rename("ha.txt.back","ha_new.txt") 106 107 def delt(dict_info): 108 backend_title = dict_info.get('backend') 109 crrent_title = "backend %s" %backend_title 110 crrent_record = "server %s %s weight %s maxconn %s" %(dict_info['record']['server'], dict_info['record']['server'], dict_info['record']['weight'], dict_info['record']['maxconn']) 111 cz_list = chazhao(backend_title) 112 if cz_list: #如果列表有数据 113 if crrent_record in cz_list: #如果数据在列表中 114 print(cz_list) 115 del cz_list[cz_list.index(crrent_record)] #删除这个列表中找到的对应数据 116 print(cz_list) 117 with open('ha.txt','r') as ha_1,open('ha_new.txt','w') as ha_2:#打开新旧配置文件 118 flag = False 119 flag_1 = False 120 for line in ha_1: #读取行在旧配置文件中 121 line_strip = line.strip() #将读取的行前后空格删除 122 if line_strip == crrent_title: #如果删除空格后的行数据等于输入的backend 123 if len(cz_list)>0: #如果列表中还有数据 124 ha_2.write(crrent_title + '\n') #将backend写回去(前面删除的时候会把当前backend删除掉) 125 flag = True 126 continue #跳出循环 127 if flag == True and line_strip.startswith('backend'): #如果flag等于True并且行开头为backend 128 flag = False 129 if flag == True and line_strip.startswith('server'): #如果flag= True并且行开头为server执行下面步骤 130 if not flag_1: 131 for i in cz_list: 132 temp = ("\t"+ i + "\n") 133 ha_2.write(temp.expandtabs()) 134 flag_1 = True 135 136 else: 137 ha_2.write(line) 138 else: 139 return 140 os.rename("ha.txt","ha.txt.back") 141 os.rename("ha_new.txt","ha.txt") 142 os.rename("ha.txt.back","ha_new.txt") 143 def main(): 144 login() 145 while True: 146 print("1.查看 2.添加 3.删除 4.退出") 147 number = input("请输入序号:") 148 149 if number == "1": 150 backend_1=input("请输入backend:") 151 cz = chazhao(backend_1) 152 print(cz) 153 continue 154 elif number == "2": 155 backend_1=input("请输入backend:") 156 server_1 = input("请输入server:") 157 weight_1 = input("请输入weight:") 158 maxconn_1 = input("请输入maxconn:") 159 s = '{"backend":"%s","record":{"server":"%s","weight":"%s","maxconn":"%s"}}'%(backend_1,server_1,weight_1,maxconn_1) 160 data_dict = json.loads(s) 161 add_1(data_dict) 162 cz_1 = chazhao(backend_1) 163 print(cz_1) 164 continue 165 elif number == "3": 166 backend_1=input("请输入backend:") 167 cz = chazhao(backend_1) 168 print(cz) 169 server_1 = input("请输入server:") 170 weight_1 = input("请输入weight:") 171 maxconn_1 = input("请输入maxconn:") 172 s = '{"backend":"%s","record":{"server":"%s","weight":"%s","maxconn":"%s"}}'%(backend_1,server_1,weight_1,maxconn_1) 173 data_dict = json.loads(s) 174 delt(data_dict) 175 cz_1 = chazhao(backend_1) 176 print(cz_1) 177 continue 178 elif number == "4": 179 exit() 180 else: 181 print("输入有误") 182 continue 183 if __name__ =='__main__': 184 main()