
一,实现对文件的增删改查
(一),三级菜单的处理结构及退出技巧:使用TAG标记
tag=True
while tag:
print('leve1')
choice=input("level1>>: ").strip()
if choice == 'quit':break
if choice == 'quit_all': tag = False
while tag:
print('level2')
choice = input("level2>>: ").strip()
if choice == 'quit': break
if choice == 'quit_all': tag = False
while tag:
print('level3')
choice = input("level3>: ").strip()
if choice == 'quit': break
if choice == 'quit_all': tag = False
(二),查询功能实现,编写fetch函数
def fetch(data):
print('这是查询功能')
print('用户数据是',data)
backend_data ='backend %s' %data
with open('haproxy.conf','r') as read_f:
tag = False #找到标志
ret =[]
for read_line in read_f:
if read_line.strip() == backend_data:#匹配到数据
tag = True
continue
if tag and read_line.startswith('backend'):#到下一个backend停止
break
if tag: #找到后读出后面的数据
print('%s' %read_line,end ='')
ret.append(read_line)
return ret def add():
pass def change():
pass def delete():
pass #Python文件里面只写不会运行的功能,测试代码在下面写
if __name__ == '__main__':
msg='''
1:查询
2:添加
3:修改
4:删除
5:退出
'''
msg_dic ={
'':fetch,
'':add,
'':change,
'':delete,
} while True:
print(msg)
choice = input('请输入你的选项:').strip()
if not choice:continue
if choice == '':
break
data = input('请输入你的数据:').strip()
res = msg_dic[choice](data)
print(res)
(三)修改功能实现,添加change函数
import os #os包含改名和删除文件函数
def fetch(data):
# print('这是查询功能')
# print('用户数据是',data)
backend_data ='backend %s' %data
with open('haproxy.conf','r') as read_f:
tag = False #找到标志
ret =[]
for read_line in read_f:
if read_line.strip() == backend_data:#匹配到数据
tag = True
continue
if tag and read_line.startswith('backend'):#到下一个backend停止
break
if tag: #找到后读出后面的数据
print('%s' %read_line,end ='')
ret.append(read_line)
return ret def add():
pass # [{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}]
def change(data):
# print('这是修改功能')
# print('用户输入数据是:',data)
backend = data[0]['backend'] #从用户传参提取www.oldboy1.org
backend_line = 'backend %s' %data[0]['backend']#内容:backend www.oldboy1.org #拼接字符串old_server_record,把用户传参的源server信息整理出来
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'])
#用户传参的目标server信息
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('来自change函数结果--》',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_line)
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_line:
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:
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 delete():
pass #Python文件里面只写不会运行的功能,测试代码在下面写
if __name__ == '__main__':
msg='''
1:查询
2:添加
3:修改
4:删除
5:退出
'''
msg_dic ={
'':fetch,
'':add,
'':change,
'':delete,
} while True:
print(msg)
choice = input('请输入你的选项:').strip()
if not choice:continue
if choice == '':
break
data = input('请输入你的数据:').strip()
if choice != '': #查询输入的是字符串,其他需要处理格式化数据
data = eval(data)
res = msg_dic[choice](data)
print('最终结果是————》',res)
(四)函数解耦,把fetch函数和change函数中对文件的处理部分提取到file_handler函数
import os #os包含改名和删除文件函数
def file_handler(backend_data,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_data: # 匹配到数据
tag = True
continue
if tag and read_line.startswith('backend'): # 到下一个backend停止
break
if tag: # 找到后读出后面的数据
print('%s' % 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_data:
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:
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(data):
# print('这是查询功能')
# print('用户数据是',data)
backend_data ='backend %s' %data
return file_handler(backend_data) def add():
pass # [{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}]
def change(data):
# print('这是修改功能')
# print('用户输入数据是:',data)
backend = data[0]['backend'] #从用户传参提取www.oldboy1.org
backend_line = 'backend %s' %data[0]['backend']#内容:backend www.oldboy1.org #拼接字符串old_server_record,把用户传参的源server信息整理出来
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'])
#用户传参的目标server信息
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('来自change函数结果--》',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_line)
file_handler(backend_line,res=res,type='change') def delete():
pass #Python文件里面只写不会运行的功能,测试代码在下面写
if __name__ == '__main__':
msg='''
1:查询
2:添加
3:修改
4:删除
5:退出
'''
msg_dic ={
'':fetch,
'':add,
'':change,
'':delete,
} while True:
print(msg)
choice = input('请输入你的选项:').strip()
if not choice:continue
if choice == '':
break
data = input('请输入你的数据:').strip()
if choice != '': #查询输入的是字符串,其他需要处理格式化数据
data = eval(data)
res = msg_dic[choice](data)
print('最终结果是————》',res)