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

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

    转自http://www.cnblogs.com/s_agapo/archive/2012/04/08/2437775.html 凡是做模拟信号采集的,很少不涉及BT.656标准的,因为常见的模拟视频 ...

  2. GridView更新后获取不到文本框修改后的值

    需要在Page_Load事件里为gridview绑定数据时,添加回传判断 if (!IsPostBack) { 绑定数据 }

  3. Spfa求最短路径

    spfa求最短路径,其思想就是遍历每一个点,将没有入队的点入队,从这个点开始不断修改能够修改的最小路径,直到队空.不过这里一个点可以重复入队. 这个需要有存图的基础--------->前向星存图 ...

  4. 阿里云ssl负载均衡证书配置

    https://www.chinassl.net/ssl_install/n683.html

  5. Centos 7环境下安装配置Hadoop 3.0 Beta1简记

    前言 由于以前已经写过一篇Centos 7环境下安装配置2.8的随笔,因此这篇写得精简些,只挑选一些重要环节记录一下. 安装环境为:两台主机均为Centos 7.*操作系统,两台机器配置分别为: 主机 ...

  6. sass 和less 分别在循环 和超出省略方面的区别!

    这两天在迁项目,新项目支持less预处理器,之前是采用的sass,就出现一些冲突,好在有对应的转换方式,重点说下 我遇到的2个问题 1:超出省略 sass: 声明: 在需要的地方: less: 在使用 ...

  7. vs2015中SQLSERVER数据库项目引用系统视图

    近期使用VS中的SQLSERVER数据库项目进行项目开发,由于有很多自动化脚本会访问系统视图,例如sysobjects之类的,在项目中的脚本总是提示无法解析的引用,解决办法如下: 添加数据库引用 添加 ...

  8. C#中获取文件信息的代码

    如下的内容内容是关于C#中获取文件信息的内容,应该对大伙有一些好处. FileInfo fi = new FileInfo(@"C:file.txt"); if(fi.Exists ...

  9. Pycharm去掉项目所有 # 注释

    通过快捷键ctrl+shift+R 进入 项目全局替换窗口,点击右上角 勾选正则,然后 搜索框输入 (#.*) 即可 ,然后点击 replace all 去掉所有注释

  10. 消息队列(Message Queue)简介及其使用

    消息队列(Message Queue)简介及其使用 摘要:利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信.消 ...