实现文件的增删改查
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import os 4 def file_handler(backend_data,res = None,type = 'fetch'): #文件处理函数 5 if type == 'fetch': #查询操作 6 with open('haproxy.conf','r') as read_f: 7 tag = False #初始状态标识 8 ret = [] #用于放置查询结果 9 for read_line in read_f: 10 if read_line.strip() == backend_data: #用strip()去除读取的末尾回车、空格 11 tag = True 12 continue #查询到需要查询的数据则继续执行下次循环 13 if tag and read_line.startswith('backend'):break #防止跳到下一条记录(以backend开头的) 14 if tag: 15 print(read_line,end = '') 16 ret.append(read_line) 17 else: 18 print('未查询到你所要找的记录!') 19 return ret 20 elif type == 'change': 21 with open('haproxy.conf','r') as read_f, 22 open('haproxy.conf_new','w') as write_f: #因为文件没有修改一说,所以相当于创建副本 23 tag = False #状态标识 24 has_write = False #用于标记已经写入的内容 25 for read_line in read_f: 26 if read_line.strip() == backend_data: 27 tag = True 28 write_f.write('%s '%backend_data) #写入需要修改的backend标题 29 continue 30 if tag and read_line.startswith('backend'): #防止跳到下一条记录(以backend开头的) 31 tag = False #遇到其他backend记录,不会出现修改 32 if not tag: #尚未读取到需要修改的部分,则直接读写 33 write_f.write(read_line) 34 else: 35 if not has_write: 36 for record in res: 37 write_f.write(record) 38 has_write = True #将修改的内容全部写好,则改变已经写入的状态 39 os.rename('haproxy.conf','haproxy.conf.bak') #将原文件备份为备份文件 40 os.rename('haproxy.conf_new','haproxy.conf') #覆盖原文件 41 def fetch(data): #查询 42 print('查询的数据为:%s'%data) 43 backend_data = 'backend %s' %data #拼接出关键词 44 return file_handler(backend_data) 45 46 47 def add(data): #添加 48 pass 49 def change(data): #修改 50 backend = data[0]['backend'] #文件中的一条记录www.oldboy1.org,需要修改,先执行查找,如果没有,则不能修改 51 backend_data = 'backend %s'%backend #backend www.oldboy1.org 52 old_server_record = '%sserver %s weight %s maxconn %s '%( 53 ' '*8,data[0]['record']['server'], 54 data[0]['record']['weight'], 55 data[0]['record']['maxconn'], 56 ) 57 new_server_record = '%sserver %s weight %s maxconn %s '%( 58 ' '*8,data[1]['record']['server'], 59 data[1]['record']['weight'], 60 data[1]['record']['maxconn'], 61 ) 62 print('用户想要修改的记录是:',old_server_record) 63 res = fetch(backend) #返回指定backend记录的列表 64 if not res or old_server_record not in res: #没找到(1 backend没找到 2 server没找到) 65 return '你要修改的记录不存在!' 66 else: 67 index = res.index(old_server_record) 68 res[index] = new_server_record #获取到修改的值列表 69 return file_handler(backend_data,res = res , type = 'change') 70 def delete(): #删除 71 pass 72 73 74 if __name__ == '__main__': #执行可执行的语句 75 msg = ''' 76 1:查询 77 2:添加 78 3:修改 79 4:删除 80 5:退出 81 ''' 82 msg_dic = { 83 '1' : fetch, 84 '2' : add, 85 '3' : change, 86 '4' : delete 87 } 88 while True: 89 print(msg) 90 choice = input('请输入你的选项:').strip() 91 if not choice : continue #用户输入为空时 92 if choice == '5':break #输入5则退出程序 93 94 if choice != '1': 95 data = eval(input('输入数据:').strip()) #有用户输入,并过滤掉前后空格及回车;在修改增加等操作传入的是字典格式 96 fetch_res = msg_dic[choice](data) #根据选项字典获取函数名,加()则运行相关选项函数 97 else: 98 data = input('输入数据:').strip() #有用户输入,并过滤掉前后空格及回车;在修改增加等操作传入的是字典格式 99 fetch_res = msg_dic[choice](data) #根据选项字典获取函数名,加()则运行相关选项函数