思维还有点乱,撸代码到深夜,先上代码吧.(我是跟着武sir的思路的)

流程图:


代码(有注释):

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
import json,os
def login():
flag = False
while True:
username = input("Please enter a user name:")
l = open('name_lock.txt','r')
for lline in l.readlines():
lline = lline.strip()
if username == lline:
print("账号被锁")
flag = True
break
if flag == True:
break
#while True:
u = open('name.txt','r')
for uline in u.readlines():
user,password,mony = uline.strip().split(':')
#print(user) if username == user: i = 0
while i < 3:
passwd = input('Please enter a password:')
i +=1 if passwd == password:
print('欢迎%s登陆管理平台' % username)
flag = True
break else:
if i >= 3:
with open('name_lock.txt','a') as l_2:
l_2.write(username + '\n')
exit("试了太多次,将被锁定,请联系管理员")
print('密码输入错误,还有%d次机会' % (3 - i))
break
else:
print("用户输入错误,请重新输入")
if flag == True:
break def chazhao(backend):
cz_list = []
flag = False
with open('ha.txt','r') as cz_1: #打开旧配置文件
for line in cz_1:
cz_line = line.strip()
if cz_line == "backend %s" % backend: #如果读取出的行等于输入的backend
flag = True
continue
if flag == True and cz_line.startswith('backend'): #如果flag=True并且行开头为backend
break
if flag == True and cz_line.startswith('server'): #如果flag= True并且行开头为server
cz_list.append(cz_line)
return cz_list def add_1(dict_info):
backend_title = dict_info.get('backend')
crrent_title = "backend %s" %backend_title
crrent_record = "server %s %s weight %s maxconn %s" %(dict_info['record']['server'], dict_info['record']['server'], dict_info['record']['weight'], dict_info['record']['maxconn'])
cz_list = chazhao(backend_title)
if cz_list:
#backend存在
if crrent_record in cz_list: #如果新的数据在旧的配置文件中
pass #不操作
else: #否则,进行以下操作
cz_list.append(crrent_record) #插入数据
#处理完成之后的中间部分
#读取旧配置文件,写入新的配置文件中
#边读边写
#新处理后的配置文件写入新的配置文件中
flag = False
flag_1 = False
with open('ha.txt','r') as ha_1,open('ha_new.txt','w') as ha_2: #打开旧配置文件,打开新配置文件
for line in ha_1:
if line.strip() == crrent_title: #如果读取的行等于输入的backend
flag = True
ha_2.write(line) #将读取的行写入新文件
continue #重新进行循环
if flag == True and line.startswith('backend'): #如果标志位等于True并且此行开头为‘backend’
flag = False #设置标志位为False(因为循环到了下一个‘backend’)
if flag == True and line.startswith('server'): #把已经处理完的数据,写入新配置文件中
if not flag_1:
for nwe_line in cz_list:
temp = ("\t"+nwe_line + "\n")
ha_2.write(temp.expandtabs()) #将新的数据按行写入新配置文件中
flag_1 = True
else:
ha_2.write(line)
else:
#backend不存在,添加记录和backend
with open('ha.txt','r') as ha_1,open('ha_new.txt','w') as ha_2:
for line in ha_1:
ha_2.write(line)
ha_2.write("\n" + crrent_title + "\n")
temp = ("\t"+crrent_record + "\n")
ha_2.write(temp.expandtabs())
os.rename("ha.txt","ha.txt.back") #将旧配置文件备份
os.rename("ha_new.txt","ha.txt") #将新配置文件命名为线上使用的文件名
os.rename("ha.txt.back","ha_new.txt") def delt(dict_info):
backend_title = dict_info.get('backend')
crrent_title = "backend %s" %backend_title
crrent_record = "server %s %s weight %s maxconn %s" %(dict_info['record']['server'], dict_info['record']['server'], dict_info['record']['weight'], dict_info['record']['maxconn'])
cz_list = chazhao(backend_title)
if cz_list: #如果列表有数据
if crrent_record in cz_list: #如果数据在列表中
print(cz_list)
del cz_list[cz_list.index(crrent_record)] #删除这个列表中找到的对应数据
print(cz_list)
with open('ha.txt','r') as ha_1,open('ha_new.txt','w') as ha_2:#打开新旧配置文件
flag = False
flag_1 = False
for line in ha_1: #读取行在旧配置文件中
line_strip = line.strip() #将读取的行前后空格删除
if line_strip == crrent_title: #如果删除空格后的行数据等于输入的backend
if len(cz_list)>0: #如果列表中还有数据
ha_2.write(crrent_title + '\n') #将backend写回去(前面删除的时候会把当前backend删除掉)
flag = True
continue #跳出循环
if flag == True and line_strip.startswith('backend'): #如果flag等于True并且行开头为backend
flag = False
if flag == True and line_strip.startswith('server'): #如果flag= True并且行开头为server执行下面步骤
if not flag_1:
for i in cz_list:
temp = ("\t"+ i + "\n")
ha_2.write(temp.expandtabs())
flag_1 = True else:
ha_2.write(line)
else:
return
os.rename("ha.txt","ha.txt.back")
os.rename("ha_new.txt","ha.txt")
os.rename("ha.txt.back","ha_new.txt")
def main():
login()
while True:
print("1.查看 2.添加 3.删除 4.退出")
number = input("请输入序号:") if number == "":
backend_1=input("请输入backend:")
cz = chazhao(backend_1)
print(cz)
continue
elif number == "":
backend_1=input("请输入backend:")
server_1 = input("请输入server:")
weight_1 = input("请输入weight:")
maxconn_1 = input("请输入maxconn:")
s = '{"backend":"%s","record":{"server":"%s","weight":"%s","maxconn":"%s"}}'%(backend_1,server_1,weight_1,maxconn_1)
data_dict = json.loads(s)
add_1(data_dict)
cz_1 = chazhao(backend_1)
print(cz_1)
continue
elif number == "":
backend_1=input("请输入backend:")
cz = chazhao(backend_1)
print(cz)
server_1 = input("请输入server:")
weight_1 = input("请输入weight:")
maxconn_1 = input("请输入maxconn:")
s = '{"backend":"%s","record":{"server":"%s","weight":"%s","maxconn":"%s"}}'%(backend_1,server_1,weight_1,maxconn_1)
data_dict = json.loads(s)
delt(data_dict)
cz_1 = chazhao(backend_1)
print(cz_1)
continue
elif number == "":
exit()
else:
print("输入有误")
continue
if __name__ =='__main__':
main()

配置文件操作

python作业day3修改配置文件的更多相关文章

  1. python作业之修改用户配置文件

    用户的配置文件如下 backend oldboy school school1 age 21 weight 210 qq 550176565 iphone 139987676backend oldgi ...

  2. python作业:HAproxy配置文件操作(第三周)

    一.作业需求: 1. 根据用户输入输出对应的backend下的server信息 2. 可添加backend 和sever信息 3. 可修改backend 和sever信息 4. 可删除backend ...

  3. day3修改配置文件

    有如下配置文件,在指定文件位置添加一条新的记录: global log 127.0.0.1 local2 daemon maxconn log 127.0.0.1 local2 info defaul ...

  4. Day3作业:ha_proxy配置文件修改

    不废话,上代码 readme: # Auther:ccorz Mail:ccniubi@163.com Blog:http://www.cnblogs.com/ccorz/ # GitHub:http ...

  5. Python学习day3作业

    days3作业 作业需求 HAproxy配置文件操作 根据用户输入,输出对应的backend下的server信息 可添加backend 和sever信息 可修改backend 和sever信息 可删除 ...

  6. python查询修改配置文件功能

    阅读目录 一.python查询功能代码 1.查询修改配置文件 global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 i ...

  7. python读写修改配置文件(ini)

    python 有时候参数需要保存到配置文件中  接下来总结一下 配置文件的读写和修改的操作 代码如下: #!/usr/bin/env python # -*- coding: utf- -*- # 读 ...

  8. python读写增删修改ini配置文件

    一,百度百科 .ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置,一般用户就用windows提供的 ...

  9. python笔记 - day3

    python笔记 - day3 参考:http://www.cnblogs.com/wupeiqi/articles/5453708.html set特性: 1.无序 2.不重复 3.可嵌套 函数: ...

随机推荐

  1. github三大步骤

    1)git init : 初始化当前目录,把这个目录变成Git可以管理的目录 2)git add [文件名称]:  把文件添加到仓库 3)git commit -m "对当前提交文件的描述& ...

  2. Javascript 原型注意事项

    function abc() {} abc.prototype.xx = { name: "keatkeat" } var x = new abc(); x.xx.name = & ...

  3. AS3读取加密XML

    首先要确定xml使用了哪些加密方式,这样在As3中就反过来解密. 我加密xml的方式是先将xml文件打包为一个压缩文件,然后将压缩文件进行RC4加密,最后用base64将加密过的压缩包转为base64 ...

  4. Struct2(三) Struct2 标签

    在上一篇 Struct2(二)中,我们新建了工程Struct2test用来验证hello World 程序,在index.jsp中,我们添加了一个Struct2 uri 标签用来创建一个指向hello ...

  5. Polymorphism & Overloading & Overriding

    In Java, a method signature is the method name and the number and type of its parameters. Return typ ...

  6. 传阿里整合资源,进军O2O市场

    阿里巴巴对于本地生活市场,以及O2O领域始终虎视眈眈.从最早的融合口碑网,到最近阶段推出淘宝点点.收购高德地图等一系列app产品,其整合线上线下消费市场的野心已十分明显. 今年年初,阿里巴巴集团重新进 ...

  7. 如何让程序(如java Hello)只启动一次?

    如何让程序(如java Hello)只启动一次? 摘自http://bbs.csdn.net/topics/50488704 总结一下,关于让Java程序只运行一个实例的问题,其实质是JVM之间通信的 ...

  8. http2.0 相对于 http1.1的优势

    1.http2.0完全是多路复用的,只需一个连接就可实现并行 可以将不同的请求夹杂在一起,只需一个连接就能加载一个页面. 2.可以让服务器将响应主动推动到客户端缓存中 当浏览器请求一个网页时,服务器除 ...

  9. linux shell在while中用read从键盘输入

    系统是ubuntu 14.04 64bit,之前曾想安装Stream来玩dota2,但最终没成功.由于Stream只有32bit,安装Stream时也安装了大量32bit的库.删除Stream后,这些 ...

  10. 编写高质量代码改善python程序91个建议学习01

    编写高质量代码改善python程序91个建议学习 第一章 建议1:理解pythonic的相关概念 狭隘的理解:它是高级动态的脚本编程语言,拥有很多强大的库,是解释从上往下执行的 特点: 美胜丑,显胜隐 ...