练习-文本日志增加删除(直接增加删除)
日志格式
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 '\n' in r[end - 1]: r[end - 1] += '\n' # 没有结束行,说明开始行没有换行,所有在开始行尾部加个换行 else: if int(pt) == 1: # 类型一区间在开始位置到开始位置+1 end = start + 1 else: # 类型二区间在开始位置到文件尾 end = len(r) #if not '\n'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 = '\tserver %s weight %s maxcoon %s\n' % ( 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)