【练习】Python第四次:实现对文件的增删改查
一,实现对文件的增删改查
(一),三级菜单的处理结构及退出技巧:使用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第四次:实现对文件的增删改查的更多相关文章
- Python文件操作-文件的增删改查
需求:对文件进行增删改查 由于时间原因,本次代码没有增加任何注释,如有疑问,请联系编辑者:闫龙 其实我也是醉了,看着这些个代码,我脑袋也特么大了,没办法,大神说了,不让用新知识,只可以使用学过的,所以 ...
- java对xml文件做增删改查------摘录
java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...
- 基于SpringMVC的文件(增删改查)上传、下载、更新、删除
一.项目背景 摘要:最近一直在忙着项目的事,3个项目过去了,发现有一个共同的业务,那就是附件的处理,附件包括各种文档,当然还有图片等特殊文件,由于时间的关系,每次都是匆匆忙忙的搞定上线,称这项目的空档 ...
- MyBatis学习(二)、SQL语句映射文件(2)增删改查、参数、缓存
二.SQL语句映射文件(2)增删改查.参数.缓存 2.2 select 一个select 元素非常简单.例如: <!-- 查询学生,根据id --> <select id=" ...
- Python 模拟SQL对文件进行增删改查
#!/usr/bin/env python # _*_ coding:UTF-8 _*_ # __auth__: Dalhhin # Python 3.5.2,Pycharm 2016.3.2 # 2 ...
- python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)
一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...
- Python Web实战:Python+Django+MySQL实现基于Web版的增删改查
前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路.效果演示在项目实战最 ...
- python 调用zabbix api接口实现主机的增删改查
python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools() 调用zabbi ...
随机推荐
- C#模拟Https请求时出现 基础连接已经关闭 未能为 SSLTLS 安全通道建立信任关系
//解决方法: //引入命名空间: using System.Security.Cryptography.X509Certificates; using System.Net.Security; // ...
- python基础知识14---迭代器、生成器、面向过程编程
阅读目录 一 迭代器 二 生成器 三 面向过程编程 一 迭代器 1 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初 ...
- activiti中的查询sql
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...
- SfMLearner 记录
2019年3月2日09:29:54 正在看SfMLearner的pytorch源码,意识到无监督的深度估计最重要的是利用实体的一致性 来建立loss. 对于一个不移动的物体,相机从一个pose到另一个 ...
- [UE4]虚幻引擎的C++环境安装
一.一般使用VS2017开发 二.需要勾选“使用C++的游戏开发”
- 安卓版的pvr图片查看
public class PVRTDecompress { /* author:FormatFa mail :1758759399@qq.com date :2017-6-14 */ //modify ...
- Flask--WTForms
简介 WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装:pip3 install wtforms 用户登录注册示例 1. 用户登录 当用户登录时候,需要对用 ...
- localStorage sessionStorage 用法
sessionStorage.getItem('key') // 获取 sessionStorage.setItem('key','value') //设置 sessionStorage.remove ...
- str中文初始化乱码,要用宽字符;if else
QString str = QString::fromUtf16(L"{\\"closeEt\": true,\\"data\" : [[1,1,10 ...
- thingsboard改造使用mysql数据库
thingsboard从2.2版本开始,兼容关系型数据库与非关系型数据库共用(关系型数据库保存实体类信息.非关系型数据库cassandra保存遥测数据信息).由于国内偏向使用mysql数据库,而非po ...