haproxy文件的增删改查
在构建一个程序项目之前,首先需要设计程序的框架,从总体上构建一个项目中的一个个功能,之后对每一个功能进行补充,最终实现总体的功能。
1 程序的总体框架:
首先把所有的功能设计成相应的函数,用pass来实现。
def add(operation):
"增加"
pass
def remove(operation):
"删除"
pass
def change(operation):
"更改"
pass
if __name__ == '__main__':
msg ="""
1.查找
2.增加
3.删除
4.更改
5.退出
"""
# 通过定义字典,在输入序号时,能够对应相应的函数
msg_dict={
"1":serach,
"2":add,
"3":remove,
"4":change,
"5":exit
}
while True:
print(msg)
usr_choice = input("请输入要进行的操作>>:").strip()
if len(usr_choice) == 0 or usr_choice not in msg_dict : continue # 用户输入为空,或者超出字典的内容,继续输入
if usr_choice == '5':
break
operation = input("请输入要操作的内容>>:").strip()
msg_dict[usr_choice](operation) # 通过字典调用函数,并传入参数operation
1.1 查询函数实现
查找是首先匹配到相应的行,判断开始和结束的位置,这里是通过标志位进行控制的。
def serach(operation):
"查找"
# pass
# serach_line = "backend %s" % operation # 查找的内容之情有backend,把输入的内容和backend进行拼接
# 还可以通过if line.strip().startwith("backend") and operation in line
search_list =[] # 将查找到的内容存放到此列表中
search_flag = False # 读取到匹配行时打开此flag
with open("haproxy.conf",encoding="utf-8") as f_read: # 打开文件,默认读操作
for line in f_read: # 逐行读取文件
# if line.strip() == serach_line: # 将匹配到每一行去掉换行,
if line.strip().startswith("backend") and operation in line: # 匹配到相应的行
search_flag = True # 匹配到后标志位为True
continue # 跳过匹配的行,操作的是下一行的内容
if line.strip().startswith("backend") and search_flag: # 判断结束行,需要放在search_flag之前
break
# search_flag = False
if search_flag:
search_list.append(line.strip()) # 将匹配的内容存储到列表中,同时删除换行符
for i in search_list:
print(i)
return search_list # 返回值是获取到的内容的列表
1.2 文件内容的增加操作
对文件的增加操作涉及了输入一个字典内容,但是实际在输入的过程中,输入的是字符串,这里用到eval()函数,能够将输入的字典形式的内容转换成字典的格式。
对文件进行修改,必然会创建一个新的文件。在这里采用的是把原来的文件中内容一行行读取并写入到新的文件中,最后把新文件的名字改成原来文件的名字。
def add(operation):
"增加,增加内容存在的情况(可以通过search()函数进行查询),增加内容不存在的情况"
# pass
backend_url = operation["backend"] # 获取输入的字典中的backend的value
record_list = serach(backend_url) #将获取到的url传递给search函数,search函数的返回值是search_list[],并赋值
backend_data = "backend %s" %backend_url # 将获取的URL同backend进行字符串的拼接
# 组成 backend www.oldboyX.org
# 用户输入的内容格式:
# {"backend":"www.oldboy.org","record":{"server":"1.1.1.1","weight":"3000","maxconn":"33333"}}
# 获取输入的字典的内容并进行字符串的拼接
dict_string = "sever %s weight %s maxconn %s" %(operation["record"]["server"],\
operation["record"]["weight"],\
operation["record"]["maxconn"],
)
if not record_list: # 这是record_list中不存在查询的内容的情况,需要进行写入
record_list.append(backend_data) # 首先对record_list进行添加 backend www.oldboyX.org
record_list.append(dict_string) # 添加具体的server weight maxconn 信息
with open("haproxy.conf",encoding="utf-8") as file_read,\
open("haproxy_new.conf","w+",encoding="utf-8") as file_write:
# 读取源文件的内容写入到新的文件中,并写入添加的内容
for line_read in file_read: # 遍历源文件的每一行内容
file_write.write(line_read) # 逐行写入新的文件
for new_line in record_list:
if new_line.startswith("backend"): # 判断新的内容是backend时,写入并换行
file_write.write(new_line+"\n")
else:
file_write.write("%s%s\n" %(" "*8,new_line))
import os
os.rename("haproxy.conf","haproxy_bak.conf") # 将源文件备份
os.rename("haproxy_new.conf","haproxy.conf") # 将新文件重命名
1.3 文件内容的删除操作
文件删除是在文件内容查询的基础进行修改的
def remove(operation):
"删除"
# pass
backend_url = operation["backend"] # 获取输入的字典中的backend的value
record_list = serach(backend_url) # 将获取到的url传递给search函数,search函数的返回值是search_list[],并赋值
backend_data = "backend %s" % backend_url # 将获取的URL同backend进行字符串的拼接
# 组成 backend www.oldboyX.org
# 用户输入的内容格式:
# 删除以下的内容
# {"backend":"www.oldboy20.org","record":{"server":'10.10.0.10.10.10.0.10',"weight":9999,"maxconn":333}}
# 获取输入的字典的内容并进行字符串的拼接
dict_string = "sever %s weight %s maxconn %s" % (operation["record"]["server"], \
operation["record"]["weight"], \
operation["record"]["maxconn"],
)
if not record_list : # 没有backend的情况 和 有backend 但是下面的内容不存在的情况
print("没有需要删除的内容")
return
else:
record_list.insert(0,backend_data) # 把拼接的backend信息插入到list中
with open("haproxy.conf",encoding="utf-8") as file_read,\
open("haproxy_new.conf","w+",encoding="utf-8") as file_write:
# 读取源文件的内容写入到新的文件中,并写入添加的内容
tag = False
flag_write = False
for r_line in file_read:
if r_line == backend_data:
tag = True
continue
if tag and r_line.startswith("backend"):
tag = False
if not tag:
file_write.write(r_line)
else:
if not flag_write:
for new_line in record_list:
if new_line.startswith("backend"):
file_write.write(new_line+"\n")
else:
file_write.write("%s%s\n" % (" " * 8, new_line))
os.rename("haproxy.conf", "haproxy_bak.conf") # 将源文件备份
os.rename("haproxy_new.conf", "haproxy.conf") # 将新文件重命名
1.4 文件内容的修改
haproxy文件的增删改查的更多相关文章
- 对haproxy文件进行增删改查
1.文件内容 global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 info defaults log global ...
- 【练习】Python第四次:实现对文件的增删改查
一,实现对文件的增删改查 (一),三级菜单的处理结构及退出技巧:使用TAG标记 tag=True while tag: print('leve1') choice=input("level1 ...
- Python文件操作-文件的增删改查
需求:对文件进行增删改查 由于时间原因,本次代码没有增加任何注释,如有疑问,请联系编辑者:闫龙 其实我也是醉了,看着这些个代码,我脑袋也特么大了,没办法,大神说了,不让用新知识,只可以使用学过的,所以 ...
- MyBatis学习(二)、SQL语句映射文件(2)增删改查、参数、缓存
二.SQL语句映射文件(2)增删改查.参数.缓存 2.2 select 一个select 元素非常简单.例如: <!-- 查询学生,根据id --> <select id=" ...
- 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个项目过去了,发现有一个共同的业务,那就是附件的处理,附件包括各种文档,当然还有图片等特殊文件,由于时间的关系,每次都是匆匆忙忙的搞定上线,称这项目的空档 ...
- 使用dom4j对xml文件进行增删改查
1.使用dom4j技术对dom_demo.xml进行增删改查 首选要下载dom4j的jar包 在官网上找不到,网上搜索了一下在这个链接:http://sourceforge.net/projects/ ...
- Python 模拟SQL对文件进行增删改查
#!/usr/bin/env python # _*_ coding:UTF-8 _*_ # __auth__: Dalhhin # Python 3.5.2,Pycharm 2016.3.2 # 2 ...
随机推荐
- vue中使用chart.js
1,安装chart.js和vue-chart.js npm install chart.js --save npm install vue-chart.js --save 2,独立文件,方便修改 封装 ...
- Golang : flag 包简介
在 Golang 程序中有很多种方法来处理命令行参数.简单的情况下可以不使用任何库,直接处理 os.Args:其实 Golang 的标准库提供了 flag 包来处理命令行参数:还有第三方提供的处理命令 ...
- java保留小数位数
System.out.println(String.format("%.5f",new Main().minRadius(n,m)));
- unity3d项目文件目录发布后,对应的ios/android应用目录
Unity3d的Resource.AssetBundle与手游动态更新的报告,在这里分享一下,希望能够对各位用Unity的朋友有些许帮助.目录:1.Unity的资源数据加载2.Resource.Str ...
- 51nod1270(dp)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1270 题意:中文题诶- 思路:dp s=abs(a1-a0)+ ...
- [HNOI2010] 物品调度 fsk
标签:链表+数论知识. 题解: 对于这道题,其实就是两个问题的拼凑,我们分开来看. 首先要求xi与yi.这个可以发现,x每增加1,则pos增加d:y每增加1,则pos增加1.然后,我们把x与y分别写在 ...
- Java的12个语法糖【转】
本文转载自公众号 Hollis 原创: 会反编译的 Hollis 侵权删 本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学 ...
- 上传到git
https://blog.csdn.net/Lucky_LXG/article/details/77849212
- 统一入口&DB代理思想
参考 https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=2650764278&idx=2&sn=b7801fb0780 ...
- python之模块random,time,os,sys,序列化模块(json,pickle),collection
引入:什么是模块: 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类型. 1.使用python编写的代码(.py ...