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

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

    都是随机存储器,断电数据消失,但Flash有点不一样,它在消失数据之前,添加了一个""性质",这个性质能上电后再识别,且把这个信号返回到ram中,这样近似的把flash当 ...

  2. React 思维索引

    关于分析React源码的文章已经有比较多,我就不献丑了. 根据分析的结果把React的大致流程和思维导图做了一点总结,图片如下: 源码在: https://github.com/laryosbert/ ...

  3. python中Multiprocessing

    import multiprocessing as mp #该函数不能有返回值,如果需要则应该将值放在queue中 def job(a,b): print('aaaa') if __name__ == ...

  4. Rhel6.5 相关操作

    Rhel 将光盘挂载动作 操作部分1 挂载光盘 https://jingyan.baidu.com/article/e52e3615a9c19440c60c5121.html ls -l /dev | ...

  5. zookeeper的读写流程

    zookeeper的读写流程 基本架构 节点数要求是奇数. 常用的接口是 get/set/create/getChildren. 读写流程 写流程 客户端连接到集群中某一个节点 客户端发送写请求 服务 ...

  6. Windows系统配置

    1.常用设置 (1)设置虚拟内存 右击:计算机-属性-高级系统设置-高级选项卡-性能组框设置按钮-高级选项卡-虚拟内存组框更改按钮-按需求设置 (2)设置休眠文件 改变休眠文件大小:powercfg ...

  7. Oracle表空间不足;查询表空间使用率(unable to extend lob segment SYS_LOB0000076749C00006$$ by 8192 in tablespace USERS)

    查询表空间对应地址 *),) total_space from dba_data_files order by tablespace_name; //方案一:修改表空间大小(32000可改为想要的数值 ...

  8. thingsboard改造使用mysql数据库

    thingsboard从2.2版本开始,兼容关系型数据库与非关系型数据库共用(关系型数据库保存实体类信息.非关系型数据库cassandra保存遥测数据信息).由于国内偏向使用mysql数据库,而非po ...

  9. 验证demo

    // chenwenjun.cpp : 定义控制台应用程序的入口点.//#include "stdafx.h"#include <iostream>#include & ...

  10. 深入理解Java虚拟机读书笔记8----Java内存模型与线程

    八 Java内存模型与线程   1 Java内存模型     ---主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.     ---此处的变量和J ...