python基础-文件操作

HAProxy配置文件CRUD操作
本文介绍了一个针对HAProxy配置文件的增删改查基本操作实现方案。具体包括如何根据用户输入的数据来查询、增加、删除及修改配置文件中的记录。

来为一个配置文件进行增删改查的基本操作

需求:

需求:

查询功能:
    当用户输入www.ali.org用户信息后,打印对应的server信息:
        server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333
        server 10.10.10.1 10.10.10.1 weight 22 maxconn 2000
        server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000

增加功能:

	当用户输入{"backend":"www.ali.org","record":{"server":1111,"weight":2222,"maxconn":3333}}

	在www.ali.org下增加一条server信息,即文件中:
backend www.ali.org
	server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333


删除功能
    当用户输入{"backend":"www.ali.org","record":{"server":1111,"weight":2222,"maxconn":3333}}
	会将www.ali.org下的server 1111 weight 2222 maxconn 3333删除,
	在文件中如下:
backend www.ali.org
	server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333


修改功能:
    当用户输入{"backend":"www.ali.org","record":{"server":0000,"weight":0000,"maxconn":0000}}

backend www.ali.org
	server 0000 weight 0000 maxconn 0000

  

配置文件:

global
        log 127.0.0.1 local2
        daemon
        maxconn 256
        log 127.0.0.1 local2 info
defaults
        log global
        mode http
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms
        option  dontlognull

listen stats :8888
        stats enable
        stats uri       /admin
        stats auth      admin:1234

frontend oldboy.org
        bind 0.0.0.0:80
        option httplog
        option httpclose
        option  forwardfor
        log global
        acl www hdr_reg(host) -i www.ali.org
        use_backend www.ali.org if www

backend www.oldboy1.org
        server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333
        server 10.10.10.1 10.10.10.1 weight 22 maxconn 2000
        server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000
backend www.oldboy2.org
        server 3.3.3.3 3.3.3.3 weight 20 maxconn 3000
backend www.oldboy20.org
        server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333

  

对文件对操作:

while True:

    print("1:增加")
    print("2:删除")
    print("3:修改")
    print("4:查看")


    number=input("input your namber:").strip()
    f_read=open("haproxy.conf",mode="r+", encoding="utf8")
    f_d=open("haproxy_delete.conf",mode="w", encoding="utf8")   #删除文件所操作的文件
    f_a=open("haproxy_add.conf",mode="w", encoding="utf8")   #增加文件所操作的文件
    f_m=open("haproxy_modify.conf",mode="w", encoding="utf8")   #修改文件所操作的文件

    flag = False
    add_flag = False
    list = []  #查询放入的列表
    d_list = []   #删除放入的列表
    a_list=[]
    m_list=[]

    if number=='4':
        print("look")
        look_input=input(">>:").strip()
        for line in f_read:
            if line.startswith("backend") and look_input in line:  # 1,信息匹配
                flag = True
                continue
            if flag and line.startswith("backend"):  # 3,结束
                break
            if flag:
                list.append(line.strip())  # 2,增加信息
        for i in list:
            print(i)

    elif number =='3':
        print("modify")
        mo_flag = False
        mo_input = input(">>").strip()
        print(mo_input)
        mo_input = eval(mo_input)
        print(mo_input)
        str_mo = "server " + str(mo_input["record"]["server"]) + " weight " + str(
            mo_input["record"]["weight"]) + " maxconn " + str(mo_input["record"]["maxconn"])
        print(str_mo)

        for line in f_read:
            if line.startswith("backend") and str(mo_input["backend"]) in line:
                m_list.append(line)
                mo_flag = True
                continue
            elif mo_flag and line.startswith("backend"):
                m_list.append(line)
                mo_flag=False

            elif mo_flag:
                # print(mo_flag)
                m_list.append("\t\t"+str_mo+"\n")
            elif mo_flag and line.count('\n')==len(line):
                continue
            else:
                m_list.append(line)

        # print(m_list)
        for i in m_list:
            f_m.write(i)
        f_m.close()


    elif number == '2':
        print("delete")
        del_flag=False
        del_input = input(">>").strip()
        del_input = eval(del_input)
        str_del = "server " + str(del_input["record"]["server"]) + " weight " + str(
            del_input["record"]["weight"]) + " maxconn " + str(del_input["record"]["maxconn"])
        print(str_del)
        for line in f_read:
            if str(del_input["backend"]) in line and line.startswith("backend"):
                d_list.append(line)
                del_flag=True
                continue
            elif del_flag and str_del in line:
                continue
            else:
                d_list.append(line)
        # print(d_list)
        for i in d_list:
           f_d.write(i)
        f_d.close()





    elif number == '1':
        print("add")



        add_input = input(">>").strip()
        add_input = eval(add_input)
        str_add = "\t\tserver " + str(add_input["record"]["server"]) + " weight " + str(
            add_input["record"]["weight"]) + " maxconn " + str(add_input["record"]["maxconn"])+"\r\n"
        # print(str_add)
        for line in f_read:
            if line.startswith("backend") and str(add_input["backend"]) in line:
                add_flag = True
                a_list.append(line)
                # a_list.append("\n" + str_add)  在记录前插入
                continue
            elif add_flag:
                print(add_flag)
                a_list.append(line)

            else:
                a_list.append(line)

        # a_list.append("\n" + str_add)
        for i in a_list:
            f_a.write(i)
        f_a.close()


    # {"backend": "www.ali.org", "record": {"server": 1111, "weight": 2222, "maxconn": 3333}}


    # server 1111 weight 2222 maxconn 3333

    # {"backend": "www.ali.org", "record": {"server": 0000, "weight": 0000, "maxconn": 0000}}

  

 

空行判断

with open("大宗师诗号" ,mode="r",encoding="utf8") as fr:
    for line in fr:
        print(line.count("\n"),len(line))

  

 

转载于:https://www.cnblogs.com/adamans/articles/7494988.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值