一,实现对文件的增删改查

(一),三级菜单的处理结构及退出技巧:使用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)

【练习】Python第四次:实现对文件的增删改查的更多相关文章

  1. Python文件操作-文件的增删改查

    需求:对文件进行增删改查 由于时间原因,本次代码没有增加任何注释,如有疑问,请联系编辑者:闫龙 其实我也是醉了,看着这些个代码,我脑袋也特么大了,没办法,大神说了,不让用新知识,只可以使用学过的,所以 ...

  2. java对xml文件做增删改查------摘录

    java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...

  3. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  4. 基于SpringMVC的文件(增删改查)上传、下载、更新、删除

    一.项目背景 摘要:最近一直在忙着项目的事,3个项目过去了,发现有一个共同的业务,那就是附件的处理,附件包括各种文档,当然还有图片等特殊文件,由于时间的关系,每次都是匆匆忙忙的搞定上线,称这项目的空档 ...

  5. MyBatis学习(二)、SQL语句映射文件(2)增删改查、参数、缓存

    二.SQL语句映射文件(2)增删改查.参数.缓存 2.2 select 一个select 元素非常简单.例如: <!-- 查询学生,根据id --> <select id=" ...

  6. Python 模拟SQL对文件进行增删改查

    #!/usr/bin/env python # _*_ coding:UTF-8 _*_ # __auth__: Dalhhin # Python 3.5.2,Pycharm 2016.3.2 # 2 ...

  7. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

  8. Python Web实战:Python+Django+MySQL实现基于Web版的增删改查

    前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路.效果演示在项目实战最 ...

  9. python 调用zabbix api接口实现主机的增删改查

    python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools()  调用zabbi ...

随机推荐

  1. 洛谷P1040 加分二叉树(树形dp)

    加分二叉树 时间限制: 1 Sec  内存限制: 125 MB提交: 11  解决: 7 题目描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,...,n),其中数字1,2,3,...,n ...

  2. js通过replace()方法配合正则去除空格

    <script> //去掉全部空格 var str = " 546546 4564 46 46 88 88 "; var str = str.replace(/\s+/ ...

  3. Java文件File类学习总结

    java.io.File类 代表文件和目录,在开发中,读取文件.生成文件.删除文件.修改文件的属性都会用到该类. 常见构造方法: public File(String pathName){} 以pat ...

  4. dialog学习

    11.dialog底部弹出动画: ==== 11.dialog底部弹出动画: 点击Button调用代码 private void show() { Dialog dialog = new Dialog ...

  5. jmetter 安装 建测试计划详细步骤

    更多Jmetter教程 1,去官网下载最新的jmetter版本: http://jmeter.apache.org/download_jmeter.cgi 2,解压下载的jmtter安装包到D:\so ...

  6. 在linux上构建gitolite

    每台机器生成密钥前要设置邮箱和用户名: git config --global user.name "admin" git config --global user.email & ...

  7. 了解unix操作系统发展阶段

    UNIX操作系统简介 UNIX操作系统(尤尼斯),是一个强大的多用户.多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson.Dennis Ritchi ...

  8. PXC5.7(Percona XtraDB Cluster)+HAproxy+Keepalived 集群部署

    Percona-XtraDB-Cluster+Haproxy 搭建集群环境 环境准备及服务器信息: 配置防火墙 firewall-cmd --add-port=3306/tcp --permanent ...

  9. 数学模块_math

    ceil 进一, 向上取整 floor 向下取整 pow(x, y) x的y次方 print(math.pow(2, 3)) # 8.0 sqrt(x) x的开平方(结果为浮点数) print(mat ...

  10. JMeter4.0源码导入Eclipse记录

    参考: https://blog.csdn.net/yue530tomtom/article/details/77870233?locationNum=10&fps=1 1.准备jdk环境 下 ...