sed作业 : 对文件实现查找,修改的功能
import os ### 为了修改后面的文件名 def fetch(date): # print(‘\033[1;44m这是查询功能\033[0m‘) # print(‘\033[1;44m用户输入的数据是%s\033[0m‘%date) backend_date = ‘backend %s‘%date with open(‘haproxy.conf‘,‘r‘) as read_f: tag = False ret = [] for read_line in read_f: if read_line.strip() == backend_date: tag = True continue if tag and read_line.startswith(‘backend‘): break if tag: print(‘\033[1;45m%s\033[0m‘%read_line,end=‘‘) ret.append(read_line) return ret def add(): pass def change(date): ### 用户输入的date是[{‘backend‘:‘www.oldboy1.org‘,‘record‘:{‘server‘:‘2.2.2.5‘,‘weight‘:30,‘maxconn‘:4000}},{‘backend‘:‘www.oldboy1.org‘,‘record‘:{‘server‘:‘2.2.2.8‘,‘weight‘:30,‘maxconn‘:4000}}] # print(‘这是修改功能‘) # print(‘用户输入的数据是%s‘%date) backend = date[0][‘backend‘] ### 文件中的一条记录 www.oldboy1.org backend_date = ‘backend %s‘ %backend ## ,‘record‘: ‘server 2.2.2.5 2.2.2.5 weight 30 maxconn 4000‘ old_server_record = ‘%sserver %s %s weight %s maxconn %s\n‘ %(‘ ‘*8,date[0][‘record‘][‘server‘], date[0][‘record‘][‘server‘], date[0][‘record‘][‘weight‘], date[0][‘record‘][‘maxconn‘]) print(‘用户想要修改的记录是:‘,old_server_record) new_server_record = ‘%sserver %s %s weight %s maxconn %s\n‘ % (‘ ‘ * 8, date[1][‘record‘][‘server‘], date[1][‘record‘][‘server‘], date[1][‘record‘][‘weight‘], date[1][‘record‘][‘maxconn‘]) print(‘用户要修改成的结果是:‘,new_server_record) res = fetch(backend) print(‘来自change函数--->‘,res) # if not res: # print(‘你要修改的记录不存在‘) # if old_backend_record in res: # print(‘你要修改的记录不存在‘) ### 二个return 一样 可合并 if not res or old_server_record not in res: return ‘你要修改的记录不存在‘ else: index = res.index(old_server_record) ### 根据值取索引 res[index] = new_server_record ### 把要改的那条 根据索引更改值 # print(‘列表中的值已经修改‘) res.insert(0,‘%s\n‘%backend_date) ### 把开头头加进去 with open(‘haproxy.conf‘,‘r‘) as read_f, open(‘haproxy.conf_new‘,‘w‘) as write_f: tag = False has_write = False for read_line in read_f: if read_line.strip() == backend_date: tag = True continue if tag and read_line.startswith(‘backend‘): tag = False if not tag: write_f.write(read_line) else: if not has_write: ### 为防止遇到一个sever,就写一次 ,在写一个状态 for record in res: write_f.write(record) has_write = True os.rename(‘haproxy.conf‘,‘haproxy.conf.bak‘) os.rename(‘haproxy.conf_new‘,‘haproxy.conf‘) os.remove(‘haproxy.conf.bak‘) def delate(): pass if __name__ == ‘__main__‘: msg = ‘‘‘ 1:查询 2:修改 3:添加 4:删除 5:退出 ‘‘‘ msg_dic = { ‘1‘:fetch, ‘2‘:change, ‘3‘:add, ‘4‘:delate } while True: print(msg) choice = input(‘请输入你的选项:‘).strip() if not choice: continue if choice == ‘5‘: break date = input(‘请输入你的数据:‘).strip() if choice != ‘1‘: date = eval(date) res = msg_dic[choice](date) print(res)
import os ### 为了修改后面的文件名 def fild_handler(backend_date,res = None,type = ‘fetch‘): if type == ‘fetch‘: with open(‘haproxy.conf‘, ‘r‘) as read_f: tag = False ret = [] for read_line in read_f: if read_line.strip() == backend_date: tag = True continue if tag and read_line.startswith(‘backend‘): break if tag: print(‘\033[1;45m%s\033[0m‘ % read_line, end=‘‘) ret.append(read_line) return ret elif type == ‘change‘: with open(‘haproxy.conf‘, ‘r‘) as read_f, open(‘haproxy.conf_new‘, ‘w‘) as write_f: tag = False has_write = False for read_line in read_f: if read_line.strip() == backend_date: tag = True continue if tag and read_line.startswith(‘backend‘): tag = False if not tag: write_f.write(read_line) else: if not has_write: ### 为防止遇到一个sever,就写一次 ,在写一个状态 for record in res: write_f.write(record) has_write = True os.rename(‘haproxy.conf‘, ‘haproxy.conf.bak‘) os.rename(‘haproxy.conf_new‘, ‘haproxy.conf‘) os.remove(‘haproxy.conf.bak‘) def fetch(date): # print(‘\033[1;44m这是查询功能\033[0m‘) # print(‘\033[1;44m用户输入的数据是%s\033[0m‘%date) backend_date = ‘backend %s‘%date return fild_handler(backend_date) def add(): pass def change(date): ### 用户输入的date是[{‘backend‘:‘www.oldboy1.org‘,‘record‘:{‘server‘:‘2.2.2.5‘,‘weight‘:30,‘maxconn‘:4000}},{‘backend‘:‘www.oldboy1.org‘,‘record‘:{‘server‘:‘2.2.2.8‘,‘weight‘:30,‘maxconn‘:4000}}] # print(‘这是修改功能‘) # print(‘用户输入的数据是%s‘%date) backend = date[0][‘backend‘] ### 文件中的一条记录 www.oldboy1.org backend_date = ‘backend %s‘ %backend ## ,‘record‘: ‘server 2.2.2.5 2.2.2.5 weight 30 maxconn 4000‘ old_server_record = ‘%sserver %s %s weight %s maxconn %s\n‘ %(‘ ‘*8,date[0][‘record‘][‘server‘], date[0][‘record‘][‘server‘], date[0][‘record‘][‘weight‘], date[0][‘record‘][‘maxconn‘]) print(‘用户想要修改的记录是:‘,old_server_record) new_server_record = ‘%sserver %s %s weight %s maxconn %s\n‘ % (‘ ‘ * 8, date[1][‘record‘][‘server‘], date[1][‘record‘][‘server‘], date[1][‘record‘][‘weight‘], date[1][‘record‘][‘maxconn‘]) print(‘用户要修改成的结果是:‘,new_server_record) res = fetch(backend) print(‘来自change函数--->‘,res) # if not res: # print(‘你要修改的记录不存在‘) # if old_backend_record in res: # print(‘你要修改的记录不存在‘) ### 二个return 一样 可合并 if not res or old_server_record not in res: return ‘你要修改的记录不存在‘ else: index = res.index(old_server_record) ### 根据值取索引 res[index] = new_server_record ### 把要改的那条 根据索引更改值 # print(‘列表中的值已经修改‘) res.insert(0,‘%s\n‘%backend_date) ### 把开头头加进去 fild_handler(backend_date,res = res,type = ‘change‘) def delate(): pass if __name__ == ‘__main__‘: msg = ‘‘‘ 1:查询 2:修改 3:添加 4:删除 ‘‘‘ msg_dic = { ‘1‘:fetch, ‘2‘:change, ‘3‘:add, ‘4‘:delate } while True: print(msg) choice = input(‘请输入你的选项:‘).strip() if not choice: continue if choice == ‘5‘: break date = input(‘请输入你的数据:‘).strip() if choice != ‘1‘: date = eval(date) res = msg_dic[choice](date) print(res)
掌握 函数式编程,文件处理,tag用法,程序解耦