zoukankan      html  css  js  c++  java
  • 练习-文本日志增加删除(直接增加删除)

    日志格式
    backend test.oldboy.orgb1
    
    backend buy.oldboy.org
    

      

    # 显示一级菜单
    def p_1():
        print('1:增加一条记录','      2:删除一条记录')
    
    # 显示二级菜单
    def p_2():
        print('1:test.oldboy.org','     2:buy.oldboy.org')
    
    
    def ins_del(ttype):
        with open('file.txt','r+') as f:  # 打开文件
            r = f.readlines()
            start = end = None
            for i in r:  # 循环取每一行
                if int(pt) == 1:
                    if 'test.oldboy.org' in i:  # 找开始位置
                        start = r.index(i)
                    elif i.strip() == '' and None != start:  # 从开始位置,如果有空行就是结束位置
                        end = r.index(i,start)
                        break
                    elif 'buy.oldboy.org' in i and None != start:  # 没有空行,就把类型二当结束位置
                        end = r.index(i,start)
                        break
                else:  # 类型二
                    if 'buy.oldboy.org' in i:  # 找类型二开始位置
                        start = r.index(i)
                    elif i.strip() == '' and None != start:  # 从开始位置,如果有空行就是结束位置
                        end = r.index(i,start)
                        break
            else:  # 如果是正常执行到这,说明end=None
                if ttype == 1:
                    end = len(r)  # 结束位置就是开始位置+1
                    if not '
    ' in r[end - 1]:
                        r[end - 1] += '
    '  # 没有结束行,说明开始行没有换行,所有在开始行尾部加个换行
                else:
                    if int(pt) == 1:  # 类型一区间在开始位置到开始位置+1
                        end = start + 1
                    else:  # 类型二区间在开始位置到文件尾
                        end = len(r)
                        #if not '
    'in r[end]
            if ttype == 1:
                r.insert(end,tstr)  # 在结束位置插入数据
                f.seek(0)  # 移动指针到首位置
                f.writelines(r)  # 开始将新内容,覆盖老内容(覆盖只会比原来行数多,所有不需要清空处理)
                p_1()  # 显示一级菜单
            else:
                for i in r[end: start:-1]:  # 倒着循环删除行
                    if 'server' in i:  # 数据行里包含server 就是有效行
                        r.pop(r.index(i))  # 删除这一行
                        break
        if ttype == 2:
            with open('file.txt','w') as f:  # 因为删除比源文件少内容,所以要用"w"清空内容,重写,否则会多数据
                f.writelines(r)
                p_1()
    
    
    p_1()
    
    while True:
        pt = input('选择操作类型:')
        if pt == 'q':  # 退出
            print('退出操作')
            exit()
        elif pt.isdigit() and int(pt) > 0 and int(pt) < 3:  # 输入是否有效
            p_2()
            if int(pt) == 1:  # 添加
                while True:
                    pt = input('选择要添加的类型:')
                    if pt == 'q':  # 退出
                        print('退出操作')
                        exit()
                    elif pt == 'b':  # 返回上一级
                        p_1()
                        break
                    elif pt.isdigit() and int(pt) > 0 and int(pt) < 3:  # 输入是否有效
                        server = input('输入server信息:')
                        weight = input('输入weight信息:')
                        maxcoon = input('输入maxcoon信息:')
                        tstr = '	server %s weight %s maxcoon %s
    ' % (
                            server,weight,maxcoon)  # 拼接字符
                        ins_del(1)
                        break  # 返回到一级菜单
                    else:
                        print('未定义 %s 操作' % pt)
            else:  # 删除
                while True:
                    pt = input('选择要删除的类型:')
                    if pt == 'q':  # 退出
                        print('退出操作')
                        exit()
                    elif pt == 'b':  # 返回上一级
                        p_1()
                        break
                    elif pt.isdigit() and int(pt) > 0 and int(pt) < 3:  # 输入是否有效
                        ins_del(2)
                        break
                    else:
                        print('未定义 %s 操作' % pt)
        else:
            print('未定义 %s 操作' % pt)
    

      

  • 相关阅读:
    Hibernate + mysql 查询伪劣时:= 出现 Space is not allowed after parameter prefix ':' MySQL异常
    Linux下使用Markdown
    第十六章:Java内存模型——Java并发编程实战
    第十五章:原子变量与非阻塞机制——Java并发编程实战
    第十四章:构建自定义的同步工具——Java并发编程实战
    第十三章:显示锁——Java并发编程实战
    访问者模式——HeadFirst设计模式学习笔记
    原型模式——HeadFirst设计模式学习笔记
    第十二章:并发程序的测试——Java并发编程实战
    备忘录模式——HeadFirst设计模式学习笔记
  • 原文地址:https://www.cnblogs.com/xh4528/p/6538738.html
Copyright © 2011-2022 走看看