zoukankan      html  css  js  c++  java
  • 21. 对文件进行查询修改等操作

    练习目的:

    1.函数编程

    2.文件处理

    3.tag的用法

    4.程序的解耦

    文件内容: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.5 2.2.2.5 weight 30 maxconn 4000
    
    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

    代码内容:

    import 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'):
                            # tag=False
                            break
                    if tag:
                        print('33[1;45m%s33[0m' %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:  # server
                    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('33[1;43m这是查询功能33[0m')
        # print('33[1;43m用户数据是33[0m',data)
        backend_data='backend %s' %data
        return file_handler(backend_data)
    
    
    
    def add():
        pass
    
    def change(data):
        # print('这是修改功能')
        # print('用户输入的数据是',data)
        backend=data[0]['backend'] #文件当中的一条记录 www.oldboy1.org
        backend_data='backend %s' %backend #backend www.oldboy1.org
        #       server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000
    
        old_server_record='%sserver %s %s weight %s maxconn %s
    ' %(' '*8,data[0]['record']['server'],
                                                                  data[0]['record']['server'],
                                                                  data[0]['record']['weight'],
                                                                  data[0]['record']['maxconn'])
    
        new_server_record = '%sserver %s %s weight %s maxconn %s
    ' % (' ' * 8, data[1]['record']['server'],
                                                                     data[1]['record']['server'],
                                                                     data[1]['record']['weight'],
                                                                     data[1]['record']['maxconn'])
        print('用户想要修改的记录是',old_server_record)
        res=fetch(backend) #fetch('www.oldboy1.org')
        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
    ' %backend_data)
        file_handler(backend_data,res=res,type='change')
    
    
    def delete():
        pass
    
    if __name__ == '__main__':
        msg='''
        1:查询
        2:添加
        3:修改
        4:删除
        5:退出
        '''
        msg_dic={
            '1':fetch,
            '2':add,
            '3':change,
            '4':delete,
        }
    
        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('最终结果是--》',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}}]

     

  • 相关阅读:
    【转载】Unity 合理安排增量更新(热更新)
    COCOS2D 释放资源的最佳时机
    【转载】利用Unity自带的合图切割功能将合图切割成子图
    用GL画出人物的移动路径
    使用行为树(Behavior Tree)实现游戏AI
    C#学习笔记
    题目:给定一数组 例如:a = [1,2,3,5,2,1] 现用户提供一个数字 请返回用户所提供的数字的所有下标
    算法: 归并排序
    题目:给定两个有序数组,对其进行合并
    数据结构 顺序表实现优先队列 回顾练习
  • 原文地址:https://www.cnblogs.com/raitorei/p/11960065.html
Copyright © 2011-2022 走看看