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 ...
随机推荐
- Mecanim动画系统 - 在角色上使用Mask 叠加动画层
http://www.narkii.com/club/thread-305706-1.html 2013-10-9 01:15 上传 下载附件 (78.65 KB) 导读:五分钟了解Mecanim角色 ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session常用方法
● public Object getAttribute(String name) 该方法返回在该session会话中具有指定名称的对象,如果没有指定名称的对象,则返回null. ● public ...
- Tcl/Tk语言学习------拆分字符串
字符串的拆分 前言 字符串的处理是每种语言经常会遇到的问题,tcl作为一门脚本语言自然也不例外,关于字符串的拆分,一般会有两种情况:1.使用单个字符拆分,2.使用字符串拆分. 1.使用单个字符拆分字符 ...
- 异常定义-Mybatis中的源码参考
public class IbatisException extends RuntimeException { private static final long serialVersionUID = ...
- .Net Core应用框架Util介绍(一)转
回顾 2015年,正当我还沉迷于JQuery + EasyUi的封装时,突然意识到技术已经过时. JQuery在面对更加复杂的UI需求时显得力不从心,EasyUi虽然组件比较完善,但界面风格老旧,响应 ...
- JS 两个数组合并
让我们先考虑下面这情况: 代码如下: var a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ];var b = [ "foo", "bar", ...
- 洛谷 P1954 [NOI2010]航空管制
https://www.luogu.org/problemnew/show/P1954 拓扑排序, 注意到如果正着建图("a出现早于b"=>"a向b连边" ...
- 关于css中父元素与子元素之间margin-top的问题
之前在使用经常遇到下面的问题: html: <div class="top"> <div class="one">I'm the fir ...
- web移动端滑动插件
1.slip只有6.3k可以说是非常小了,主要是通过css3里面的transform来改变的位置,控制的是父容器,使用也非常简单,具体信息移步slip.js.一个简单的demo如下 <!DOCT ...
- mongodb备份、还原
1.mongodb 备份 mongodump 命令可以使用可用的选项的列表. 此命令将仅备份指定的数据库,在指定的路径 语法 描述 示例 mongodump --host HOST_NAME --p ...