• 圣诞节的整理前两周的内容4


    一、eval函数复习:

    a=[{'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}}]
    print(type(a))
    
    b={'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}}
    # print(type(b))
    
    
    c=[{'sdf':123,'ddd':'afdaf'}]
    # print(type(c))
    
    d='[1,2,3]'
    print(type(d))

    二、insert函数 的复习:

    p=[123,'xyz']
    p.insert(0,'abc')
    print(p)

    三、write函数的复习:

    filename = 'pragramming.txt'
    
    with open(filename,'w') as fileobject: #使用‘w’来提醒python用写入的方式打开
        fileobject.write('I love your name!'
                         '\nI love your cloth!'
                         '\nI love your shoes!'
                         '\nI love your hair!')
    # 这种操作绝不会改动文件名的!!!!
    
    with open(filename,'a') as fileobject: #使用‘a’来提醒python用附加模式的方式打开
        fileobject.write('\nI an superman.')

    四、查询功能:

    1.题目: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

    2.查询功能要求与代码:
    # 题目要求:
    # 对于查询,输入backend 后面 的网址,就查出来server相关的内容
    # 对于修改,必须是查到的情况下进行修改操作,如果没有查询到,修改个P
    # 修改要求:将haproxy中的backend 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 fetch(data):  #因为是查询功能,所以必须需要调用一个参数
        # print('\033[1;43m这是查询功能\033[0m')
        # print('\033[1;43m用户输入的数据是\033[0m',data)
        backend_data='backend %s' %data
        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'):
                    break  #后面有return,因此这里先放一个break
                if tag:   #这时,tag为ture状态
                    print('\033[1;45m%s\033[0m'%read_line,end='')
                    ret.append(read_line)
    
                if not tag:   #这时,tag还是原来的false,这时只是做了一个for循环遍历了每一行而已
                    pass
        return ret
    
    def add():
        pass
    def change(data):
        # print('这个是修改功能')
        # print('用户输入的数据是',data)
        # data[0]  #文件当中的一条记录
        backend=data[0]['backend']     #它就是:www.oldboy1.org
        backend_data='backend %s'%backend #它就是:bankend www.oldboy1.org
    
        # 注释:[{'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
        old_server_record='%sserver %s %s weight %s maxconn %s\n'%(' '*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\n' % (' ' * 8,
                                                                       data[1]['record']['server'],
                                                                       data[1]['record']['server'],
                                                                       data[1]['record']['weight'],
                                                                       data[1]['record']['maxconn'])
        print('用户想要修改的记录是',old_server_record)
        res=fetch(backend)
        print('来自change函数——》',res)
        if not res:   #表示res是空列表,即用户输入的内容在文件中找不到,找不到,则不能修改!
            return '修改记录不存在'
    
        if old_server_record not in res:       #表示如果虽然找到了www.oldboy1.org,但是对应的下方的serve内容不存在,同样不能修改!
            return '修改记录不存在'           #需要判断我找到的要修改的记录是不是在我的列表里面
        else:    #这时,完成修改操作
            index=res.index(old_server_record)
            # data有两个值,data[0]是我要改的值,data[1]是我要修改成的值
            res[index]=new_server_record
            # print('列表中的值已经修改')
            #因为文件操作的时候如果修改则会将原来的东西全部删除创建新的,
            # 所以for循环将原来没有改得值重新插入新文件中,得到修改过的文件
            res.insert(0,'%s\n'%backend_data)
            with open('haproxy.conf','r') as read_f,\
                    open('haproxy.conf_new','w') as write_f:
                tag=False
                tag2=False
                for read_line in read_f:    #server
                    #write_f.write(read_line)  #这里相当于把haproxy里面的内容读一行复制给write_f,读一行复制给write_f
                    if read_line.strip()==backend_data:
                        tag=True  #警报拉响!
                        continue
                    if tag and read_line.startswith('backend'):
                        tag=False
                    if tag:
                        if not tag2:
                            for record in res:  #当警报拉响的时候,我就直接向新文件里面写列表(res)的内容即可。
                                write_f.write(record)
                            tag2=True
                    if not tag:
                        write_f.write(read_line)
    
    
    
    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}}]
    
            #输入:[{'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}}]

    3.查询功能的part1的test.py

    # while True:
    #     print('level')
    #     choice=input('level1>>: ').strip()
    #     if choice=='quit':break   #表示退出当前层
    #     while True:
    #         print('level2')
    #         choice = input('level2>>: ').strip()
    #         if choice == 'quit': break   #表示退出当前层,返回上一层level1
    #         while True:
    #             print('level3')
    #             choice = input('level3>>: ').strip()
    #             if choice == 'quit': break
    
    
    
    
    
    
    
    #
    # tag=True
    # while True:
    #     print('level')
    #     choice=input('level1>>: ').strip()
    #     if choice=='quit':break   #表示退出当前层
    #     while True:
    #         print('level2')
    #         choice = input('level2>>: ').strip()
    #         if choice == 'quit': break   #表示退出当前层,返回上一层level1
    #         while True:
    #             print('level3')
    #             choice = input('level3>>: ').strip()
    #             if choice == 'quit': break
    # if choice=='quit_all':tag=False   #这样的话,不管是哪一层,输入quit_all就会全部结束
    
    
    
    
    
    
    
    
    #
    # a=[1,2,3,4,5]
    # b=['asx','sdf','asda','alex','wupeiqi']
    # print(a.index(3))
    # print(b.index('asda'))
    # # index()的作用:显示对象的索引位置
    
    
    
    
    
    res=['        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']
    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}}]
    old_server_record='%sserver %s %s weight %s maxconn %s\n'%(' '*8,
                                                                 data[0]['record']['server'],
                                                                 data[0]['record']['server'],
                                                                 data[0]['record']['weight'],
                                                                 data[0]['record']['maxconn'])
    index=res.index(old_server_record)
    print(index)

    4.修改功能的相关图片:

    5.程序的解耦(基于查询功能的代码进行)

    #在上个例子中,fetch()和change()里面的with open...下面的一坨都是在做文件处理功能。
    #那么我就会想能不能将这个文件处理功能封装成一个函数
    #从而这个程序和之前的程序效果是一样的,但是可读性更强!
    
    def file_handle(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'):
                        break  #后面有return,因此这里先放一个break
                    if tag:   #这时,tag为ture状态
                        print('\033[1;45m%s\033[0m'%read_line,end='')
                        ret.append(read_line)
    
                    if not tag:   #这时,tag还是原来的false,这时只是做了一个for循环遍历了每一行而已
                        pass
            return ret
        elif type == 'change':
            with open('haproxy.conf', 'r') as read_f, \
                    open('haproxy.conf_new', 'w') as write_f:
                tag = False
                tag2 = False
                for read_line in read_f:  # server
                    # write_f.write(read_line)  #这里相当于把haproxy里面的内容读一行复制给write_f,读一行复制给write_f
                    if read_line.strip() == backend_data:
                        tag = True  # 警报拉响!
                        continue
                    if tag and read_line.startswith('backend'):
                        tag = False
                    if tag:
                        if not tag2:
                            for record in res:  # 当警报拉响的时候,我就直接向新文件里面写列表(res)的内容即可。
                                write_f.write(record)
                            tag2 = True
                    if not tag:
                        write_f.write(read_line)
    
    
    
    
    def fetch(data):  #因为是查询功能,所以必须需要调用一个参数
        # print('\033[1;43m这是查询功能\033[0m')
        # print('\033[1;43m用户输入的数据是\033[0m',data)
        backend_data='backend %s' %data
        return file_handle(backend_data)
    
    
    def add():
        pass
    def change(data):
        # print('这个是修改功能')
        # print('用户输入的数据是',data)
        # data[0]  #文件当中的一条记录
        backend=data[0]['backend']     #它就是:www.oldboy1.org
        backend_data='backend %s'%backend #它就是:bankend www.oldboy1.org
    
        # 注释:[{'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
        old_server_record='%sserver %s %s weight %s maxconn %s\n'%(' '*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\n' % (' ' * 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:   #表示res是空列表,即用户输入的内容在文件中找不到,找不到,则不能修改!
            return '修改记录不存在'
    
        if old_server_record not in res:       #表示如果虽然找到了www.oldboy1.org,但是对应的下方的serve内容不存在,同样不能修改!
            return '修改记录不存在'           #需要判断我找到的要修改的记录是不是在我的列表里面
        else:    #这时,完成修改操作
            index=res.index(old_server_record)
            # data有两个值,data[0]是我要改的值,data[1]是我要修改成的值
            res[index]=new_server_record
            # print('列表中的值已经修改')
            #因为文件操作的时候如果修改则会将原来的东西全部删除创建新的,
            # 所以for循环将原来没有改得值重新插入新文件中,得到修改过的文件
        res.insert(0,'%s\n'%backend_data)
        file_handle(backend_data,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)


    
    
  • 相关阅读:
    电视剧,电影,动漫推荐
    004CH32V307(WCH单片机)学习开发添加文件夹分组,添加文件,头文件包含设置
    1CH32V307+ESP8266程序升级篇(自建物联网平台)CH32V307通过ESP8266使用http或https下载程序文件升级程序(单片机程序轮训检查更新)
    102CH32V307(WCH单片机)学习开发系统滴答定时器
    104CH32V307(WCH单片机)学习开发串口
    020CH32V307(WCH单片机)学习开发关于warning: 'at' attribute directive ignored, 把数据存储在flash的固定位置
    0CH32V307+ESP8266基本控制篇(自建物联网平台)整体运行测试Android使用APUConfig配网绑定ESP8266,并通过MQTT实现远程通信控制
    0CH32V307+ESP8266基本控制篇(自建物联网平台)整体运行测试微信小程序使用APUConfig配网绑定ESP8266,并通过MQTT实现远程通信控制
    02CH32V307+ESP8266基本控制篇(自建物联网平台)硬件使用说明
    IDEA配置Maven(详细版)
  • 原文地址:https://www.cnblogs.com/mufaiyang/p/10174606.html
Copyright © 2020-2023  润新知