Python3基础-查询功能

1、嵌套循环,一层一层的退出

while True:
    print('level')
    choice = input('level>>>:').strip()
    if choice == 'quit':break
    while True:
        print('level2')
        choice = input('leve2>>>:').strip()
        if choice == 'quit': break
        while True:
            print('level3')
            choice = input('leve3>>>').strip()
            if choice == 'quit': break

执行以上代码,结果如下:

level
level>>>:11
level2
leve2>>>:22
level3
leve3>>>33
level3
leve3>>>quit
level2
leve2>>>:quit
level
level>>>:quit

2、嵌套循环,退出一个就退出所有的循环

tag = True #标识状态

while tag:
    print('level')
    choice = input('level>>>:').strip()
    if choice == 'quit':break
    if choice == 'quit_all': tag = False
    while tag:
        print('level2')
        choice = input('leve2>>>:').strip()
        if choice == 'quit': break
        if choice == 'quit_all': tag = False
        while tag:
            print('level3')
            choice = input('leve3>>>').strip()
            if choice == 'quit': break
            if choice == 'quit_all': tag = False

执行以上代码,结果如下:

level
level>>>:11
level2
leve2>>>:22
level3
leve3>>>33
level3
leve3>>>quit_all

3、查询、修改功能

import os
def fetc(data):
    # print("\033[1;33;0m===查询=== \033[0m")
    # print("\033[1;33;0m用户的数据是: \033[0m",data)
    backend_data='backend %s' %data
    #print(backend_data)
    with open('fet.conf','r')as f: #打开fet.conf文件
        tag = False   #设置标识
        readf_list=[]
        for read_line in f:  #一行行的读取fet.conf文件
            if read_line.strip() == backend_data:  #匹配到的数据 跳过该行继续执行
                tag = True
                continue
            if tag and read_line.startswith('backend'):
                break
            if tag:
                #print('\033[1;31;0m%s\033[0m'%read_line,end='')
                readf_list.append(read_line)
        return readf_list


def add():
    print("我是添加函数")

"""
修改功能
用户输入的数据格式是:
[{'backend':'www.baidu.com','data':{'server':'100.100.10.8','weight':'20','maxconn':30}},{'backend':'www.baidu.com','data':{'server':'100.100.10.1','weight':'200','maxconn':300}}]
将list[0]和读取文本中相同的数据修改为list[1]的数据
然后将修改后的数据写入文本中

"""
def change(data):
    # print("\033[1;34;0m===修改=== \033[0m")
    # print("\033[1;34;0m用户的数据是: \033[0m", data)
    if data.startswith('[') and data.endswith(']'):
        data_list = eval(data)
        data = data_list[0]['backend']
        backend_data = 'backend %s' % data
        old_server_data='%sserver %s %s weight %s maxconn %s\n'%(' '*8,data_list[0]['data']['server'],
                                                                data_list[0]['data']['server'],
                                                                data_list[0]['data']['weight'],
                                                                data_list[0]['data']['maxconn'])
        new_server_data='%sserver %s %s weight %s maxconn %s\n'%(' '*8,data_list[1]['data']['server'],
                                                                data_list[1]['data']['server'],
                                                                data_list[1]['data']['weight'],
                                                                data_list[1]['data']['maxconn'])
        # print('用户想要修改的记录:%s'%old_server_data)
        # print('用户想要修改的记录:%s' %new_server_data)
        fetc_data=fetc(data)
        # print("返回的fetc_data",fetc_data)
        if not fetc_data or old_server_data not in fetc_data:
            print('修改记录不存在')
        else:
            #print('哈哈哈 记录存在')
            index = fetc_data.index(old_server_data)
            fetc_data[index]=new_server_data
            #print("修改后的fetc_data",fetc_data)
        #print('加入新的fetc_data的数据',fetc_data)
        with open('fet.conf','r') as read_f,open('fet_new.conf','w') as write_f:
            tag = False
            has_write = False
            for read_line in read_f:
                if read_line.strip() == backend_data:  # 匹配到的数据 跳过该行继续执行
                    tag = True
                    write_f.write(read_line)
                    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 fetc_data:
                            write_f.write(record)
                        has_write = True

        os.rename('fet.conf', 'fet.conf.bak')  # 将文件fet.conf重新命名为fet.conf.bak
        os.rename('fet_new.conf', 'fet.conf')  # 将文件fet_new.conf重新命名为fet.conf
        # os.remove('fet.conf.bak')
    else:
        return "请输入正确格式的数据。eg [{'backend':'www.baidu.com','data':{'server':'100.100.10.1','weight':'20','maxconn':30}}]"


# [{'backend':'www.baidu.com','data':{'server':'100.100.10.8','weight':'20','maxconn':30}},{'backend':'www.baidu.com','data':{'server':'100.100.10.1','weight':'200','maxconn':300}}]
#
def delete():
    print("我是删除函数")

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

    while True:
        print(msg)
        choice=input("请输入你的选项:").strip()
        if not choice:continue
        if choice == '5':break

        data= input("请输入你的数据:").strip()
        res=msg_dic[choice](data)
        print(res)

4、优化文件处理

# -*- encoding: utf-8 -*-
"""
@File    : sed_new.bak.py
@Time    : 2019/10/25 18:06
@Author  : SuSu
@Software: PyCharm
"""

import os
def file_handle(backend_data,fetc_data=None,type='fetch'):
    if type == 'fetch':
        with open('fet.conf','r')as f: #打开fet.conf文件
            tag = False   #设置标识
            readf_list=[]
            for read_line in f:  #一行行的读取fet.conf文件
                if read_line.strip() == backend_data:  #匹配到的数据 跳过该行继续执行
                    tag = True
                    continue
                if tag and read_line.startswith('backend'):
                    break
                if tag:
                    #print('\033[1;31;0m%s\033[0m'%read_line,end='')
                    readf_list.append(read_line)
        return readf_list
    elif type == 'change':
        with open('fet.conf','r') as read_f,open('fet_new.conf','w') as write_f:
            tag = False
            has_write = False
            for read_line in read_f:
                if read_line.strip() == backend_data:  # 匹配到的数据 跳过该行继续执行
                    tag = True
                    write_f.write(read_line)
                    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 fetc_data:
                            write_f.write(record)
                        has_write = True
        os.rename('fet.conf', 'fet.conf.bak')  # 将文件fet.conf重新命名为fet.conf.bak
        os.rename('fet_new.conf', 'fet.conf')  # 将文件fet_new.conf重新命名为fet.conf
        os.remove('fet.conf.bak')

def fetc(data):
    # print("\033[1;33;0m===查询=== \033[0m")
    # print("\033[1;33;0m用户的数据是: \033[0m",data)
    backend_data='backend %s' %data
    #print(backend_data)
    return  file_handle(backend_data)

def add():
    print("我是添加函数")

"""
修改功能
用户输入的数据格式是:
[{'backend':'www.baidu.com','data':{'server':'100.100.10.8','weight':'20','maxconn':30}},{'backend':'www.baidu.com','data':{'server':'100.100.10.1','weight':'200','maxconn':300}}]
将list[0]和读取文本中相同的数据修改为list[1]的数据
然后将修改后的数据写入文本中

"""
def change(data):
    # print("\033[1;34;0m===修改=== \033[0m")
    # print("\033[1;34;0m用户的数据是: \033[0m", data)
    if data.startswith('[') and data.endswith(']'):
        data_list = eval(data)
        data = data_list[0]['backend']
        backend_data = 'backend %s' % data
        old_server_data='%sserver %s %s weight %s maxconn %s\n'%(' '*8,data_list[0]['data']['server'],
                                                                data_list[0]['data']['server'],
                                                                data_list[0]['data']['weight'],
                                                                data_list[0]['data']['maxconn'])
        new_server_data='%sserver %s %s weight %s maxconn %s\n'%(' '*8,data_list[1]['data']['server'],
                                                                data_list[1]['data']['server'],
                                                                data_list[1]['data']['weight'],
                                                                data_list[1]['data']['maxconn'])
        fetc_data=fetc(data)
        if not fetc_data or old_server_data not in fetc_data:
            print('修改记录不存在')
        else:
            index = fetc_data.index(old_server_data)
            fetc_data[index]=new_server_data
        file_handle(backend_data,fetc_data,type='change')

    else:
        return "请输入正确格式的数据。eg [{'backend':'www.baidu.com','data':{'server':'100.100.10.1','weight':'20','maxconn':30}}]"


# [{'backend':'www.baidu.com','data':{'server':'100.100.10.8','weight':'20','maxconn':30}},{'backend':'www.baidu.com','data':{'server':'100.100.10.1','weight':'200','maxconn':300}}]
#
def delete():
    print("我是删除函数")

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

    while True:
        print(msg)
        choice=input("请输入你的选项:").strip()
        if not choice:continue
        if choice == '5':break

        data= input("请输入你的数据:").strip()
        res=msg_dic[choice](data)
        print('最终的结果',res)

 

posted @ 2019-10-25 18:29  槑槑DE  阅读(124)  评论(0)    收藏  举报