Python之旅的第13天(功能的练习)

突然看到关于习题的部分,要求是为文件实现查询、添加、修改、删除、退出等功能

先出现自己的弱爆了的版本吧!

# 需要实现对一个文件的查询、添加、修改、删除、和退出
# 日常写Python文件的时候在正式执行的文件前面应该加上 if __name__ = '__main__'
# 用于区分,这样别人在调用文件的时候就不会将这些需要执行的部分进行执行了
# 首先应写出文件功能框架,再加入对应方法的代码
# 函数练习、文件解耦、tag的引入
import os
def fetch(data):   #定义查询函数
    print('这是查询功能')
    print('查询的内容是:',data)
    backend_data = 'backend %s'%data
    res = []
    with open('ceshi','r') as read_f:
        tag = False
        for read_line in read_f:
            if read_line.strip() == backend_data:
                tag = True
                continue
            if tag and read_line.startswith('backend'):
                break
            if tag:
                print(read_line,end = '')
                res.append(read_line)
    return res

def add():     #定义添加函数
    pass

def change(data):   #定义修改方法
    print('用户输入的内容是>>>',data)
    backend = data[0]['backend']      #获得列表中输入的字典一个值www.oldboy20.org
    backend_data = 'backend %s'%backend

    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)
    print(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\n'%backend_data)
    with open('ceshi','r') as read_f,\
            open('ceshi_new','w') as write_f:
        tag = False
        has_write = True
        for read_line in read_f:
            if read_line.strip() == backend_data:
                tag = True
                continue
            if tag and read_line.startswith('backend'):
                break
            if not tag:
                write_f.write(read_line)
            else:
                if has_write :
                    for record in res:
                        write_f.write(record)
    os.rename('ceshi','ceshi1')
    os.rename('ceshi_new','ceshi')
    os.remove('ceshi1')


def delete():   #定义删除方法
    pass

def exit():     #定义退出
    pass

if __name__ == '__main__':
    msg = '1.查询' \
          '2.添加' \
          '3.修改' \
          '4.删除' \
          '5.退出' \
          '6.其他操作'

    menu_dic = {
        '1': fetch,
        '2': add,
        '3': change,
        '4': delete,
        '5': exit
    }

    while True:
        print(msg)
        choice = input('请选择操作>>>').strip()
        if len(choice) == 0 or choice not in menu_dic:
            continue
        if choice == 5:
            break

        data=input("数据>>: ").strip()

        #menu_dic[choice](data)==fetch(data)
        if choice != '1':
            data=eval(data)
        res = menu_dic[choice](data) #add(data)
        print(res)

紧接着是按照视频中讲授的内容,对文件做了一定的解耦之后发生的神奇变化。

#_*_coding:utf-8_*_
import os
def file_handle(filename,backend_data,record_list=None,type='fetch'): #type:fetch append change
    new_file=filename+'_new'
    bak_file=filename+'_bak'
    if type == 'fetch':
        r_list = []
        with open(filename, 'r') as f:
            tag = False
            for line in f:
                if line.strip() == backend_data:
                    tag = True
                    continue
                if tag and line.startswith('backend'):
                    break
                if tag and line:
                    r_list.append(line.strip())
            for line in r_list:
                print(line)
            return r_list
    elif type == 'append':
        with open(filename, 'r') as read_file, \
                open(new_file, 'w') as write_file:
            for r_line in read_file:
                write_file.write(r_line)

            for new_line in record_list:
                if new_line.startswith('backend'):
                    write_file.write(new_line + '\n')
                else:
                    write_file.write("%s%s\n" % (' ' * 8, new_line))
        os.rename(filename, bak_file)
        os.rename(new_file, filename)
        os.remove(bak_file)
    elif type == 'change':
        with open(filename, 'r') as read_file, \
                open(new_file, 'w') as write_file:
            tag=False
            has_write=False
            for r_line in read_file:
                if r_line.strip() == backend_data:
                    tag=True
                    continue
                if tag and r_line.startswith('backend'):
                    tag=False
                if not tag:
                    write_file.write(r_line)
                else:
                    if not has_write:
                        for new_line in record_list:
                            if new_line.startswith('backend'):
                                write_file.write(new_line+'\n')
                            else:
                                write_file.write('%s%s\n' %(' '*8,new_line))
                        has_write=True
        os.rename(filename, bak_file)
        os.rename(new_file, filename)
        os.remove(bak_file)

def fetch(data):
    backend_data="backend %s" %data
    return file_handle('haproxy.conf',backend_data,type='fetch')
def add(data):
    backend=data['backend']
    record_list=fetch(backend)
    current_record="server %s %s weight %s maxconn %s" %(data['record']['server'],\
                                                         data['record']['server'],\
                                                         data['record']['weight'],\
                                                         data['record']['maxconn'])
    backend_data="backend %s" %backend

    if not record_list:
        record_list.append(backend_data)
        record_list.append(current_record)
        file_handle('haproxy.conf',backend_data,record_list,type='append')
    else:
        record_list.insert(0,backend_data)
        if current_record not in record_list:
            record_list.append(current_record)
        file_handle('haproxy.conf',backend_data,record_list,type='change')
def remove(data):
    backend=data['backend']
    record_list=fetch(backend)
    current_record="server %s %s weight %s maxconn %s" %(data['record']['server'],\
                                                         data['record']['server'],\
                                                         data['record']['weight'],\
                                                         data['record']['maxconn'])
    backend_data = "backend %s" % backend
    if not record_list or current_record not in record_list:
        print('\033[33;1m无此条记录\033[0m')
        return
    else:
        #处理record_list
        record_list.insert(0,backend_data)
        record_list.remove(current_record)
        file_handle('haproxy.conf',backend_data,record_list,type='change')
def change(data):
    backend=data[0]['backend']
    record_list=fetch(backend)

    old_record="server %s %s weight %s maxconn %s" %(data[0]['record']['server'],\
                                                         data[0]['record']['server'],\
                                                         data[0]['record']['weight'],\
                                                         data[0]['record']['maxconn'])

    new_record = "server %s %s weight %s maxconn %s" % (data[1]['record']['server'], \
                                                        data[1]['record']['server'], \
                                                        data[1]['record']['weight'], \
                                                        data[1]['record']['maxconn'])
    backend_data="backend %s" %backend

    if not record_list or old_record not in record_list:
        print('\033[33;1m无此内容\033[0m')
        return
    else:
        record_list.insert(0,backend_data)
        index=record_list.index(old_record)
        record_list[index]=new_record
        file_handle('haproxy.conf',backend_data,record_list,type='change')
def qita(data):
    pass


if __name__ == '__main__':
    msg='''
    1:查询
    2:添加
    3:删除
    4:修改
    5:退出
    6:其他操作
    '''
    menu_dic={
        '1':fetch,
        '2':add,
        '3':remove,
        '4':change,
        '5':exit,
        '6':qita,
    }
    while True:
        print(msg)
        choice=input("操作>>: ").strip()
        if len(choice) == 0 or choice not in menu_dic:continue
        if choice == '5':break

        data=input("数据>>: ").strip()

        #menu_dic[choice](data)==fetch(data)
        if choice != '1':
            data=eval(data)
        menu_dic[choice](data) #add(data)

真的是需要深刻理解,后面的内容还是比较多的,就不能继续看下去了,就跟今天吃饭一样,搞多了反而拉肚子了。

posted @ 2020-03-06 23:44  崆峒山肖大侠  阅读(164)  评论(0编辑  收藏  举报