练习-文本日志增加删除(直接增加删除)

日志格式
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)

  

原文地址:https://www.cnblogs.com/xh4528/p/6538738.html