python 13 读写文件记录(小测试)

需求:读取文件里面的记录,查询某个数据是否存在,如果数据存在,修改子一级某一条数据,将文件备份。

如查询: www.oldboy1.org 是否存在,如果存在,将子一级数据中的  server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000 修改为 server 2.2.2.5 2.2.2.5 weight 30 maxconn 4000

 

测试代码

# 查询文件中数据方法
def file_handler(backend_data):
    res = []
    with open("haproxy.conf", "r") as read_f:  # 使用读权限打开文件
        tag = False
        for readline in read_f:  # 遍历文件每一行
            if readline == backend_data:
                tag = True
                continue
            if tag and readline.startswith("backend"):
                break
            if tag:
                print(readline, end="")
                res.append(readline)
    return res

# 修改文件数据方法
def file_change_handler(backend_data, res):
    tag = False
    with open("haproxy.conf", "r") as read_f, \
            open("haproxy.conf.bak", "w") as write_f:  # 打开文件
        for readline in read_f:
            if backend_data == readline:
                res.insert(0, backend_data)  # 把backend 插入到第一个位置
                write_f.writelines(res)  # 将列表所有数据一次性写入文件
                tag = True
                continue
            if tag and readline.startswith("backend"):
                tag = False
            if not tag:
                write_f.write(readline)


# 查询
def fetch(data):
    print("\033[1;10m这是查询方法,输入的数据\033[0m data = {}".format(data))
    backend_data = "backend {}\n".format(data)
    res = file_handler(backend_data)
    return res

# 添加
def add():
    pass

# 修改
def change(data):
    print("这是change函数,data = {}".format(data))
    backend = data[0]["backend"]
    format_str = "{0}server {1} {1} weight {2} maxconn {3}\n"  # 根据文件要求格式拼接数据
    old_server_record = format_str.format(" "*8, data[0]['record']['server'],
                                        data[0]['record']['weight'], data[0]['record']['maxconn'])
    new_server_record = format_str.format(" "*8, data[1]['record']['server'],
                                        data[1]['record']['weight'], data[1]['record']['maxconn'])
    print("用户想要修改的记录是:{}".format(old_server_record))
    res = fetch(backend)
    print("change 查询结果:{}".format(res))
    if not res or old_server_record not in res:
        print("寻找的数据不存在")
    else:
        index = res.index(old_server_record)  # 找到旧数据在列表中索引
        res[index] = new_server_record  # 修改为新数据
        backend_data = "backend {}\n".format(backend)
        file_change_handler(backend_data, res)
        print("修改完成")

# 删除
def delete():
    pass


msg = """
    1: 查询
    2:添加
    3:修改
    4:删除
    5:退出
    """
msg_dic = {
    "1": fetch,
    "2": add,
    "3": change,
    "4": delete,
}

if __name__ == '__main__':
    while True:
        print(msg)
        choice = input("请输入下一步操作:").strip()
        if not choice:
            continue
        if choice == "5":
            break
        data = input("请输入你的数据:").strip()
        if choice != "1":
            data = eval(data)
        res = msg_dic[choice](data)  # 根据选择的数据调用对应方法
        print("最终结果:{}".format(res))

# [{'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}}]

 

查询结果:

D:\python_base/03_python_base/day21/sed_code/sed.py
    1: 查询
    2:添加
    3:修改
    4:删除
    5:退出
    
请输入下一步操作:1
请输入你的数据:www.oldboy1.org 
这是查询方法,输入的数据 data = www.oldboy1.org
        server 101.1000.7.9 101.1000.7.9 weight 20 maxconn 30
        server 2.2.2.7 2.2.2.7 weight 30 maxconn 4000
        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

最终结果:['        server 101.1000.7.9 101.1000.7.9 weight 20 maxconn 30\n', '        server 2.2.2.7 2.2.2.7 weight 30 maxconn 4000\n', '        server 10.10.10.1 10.10.10.1 weight 22 maxconn 2000\n', '        server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000\n', '\n']

修改结果:

请输入下一步操作:3
请输入你的数据:[{'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}}]
这是change函数,data = [{'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}}]
用户想要修改的记录是:        server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000

这是查询方法,输入的数据 data = www.oldboy1.org
        server 101.1000.7.9 101.1000.7.9 weight 20 maxconn 30
        server 2.2.2.7 2.2.2.7 weight 30 maxconn 4000
        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

change 查询结果:['        server 101.1000.7.9 101.1000.7.9 weight 20 maxconn 30\n', '        server 2.2.2.7 2.2.2.7 weight 30 maxconn 4000\n', '        server 10.10.10.1 10.10.10.1 weight 22 maxconn 2000\n', '        server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000\n', '\n']
修改完成

 

使用的 haproxy.conf 文件数据

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.oldboy.org
        use_backend www.oldboy.org if www

backend www.oldboy1.org
        server 101.1000.7.9 101.1000.7.9 weight 20 maxconn 30
        server 2.2.2.7 2.2.2.7 weight 30 maxconn 4000
        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


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值