python基础-文件操作
来为一个配置文件进行增删改查的基本操作
需求:
需求: 查询功能: 当用户输入www.ali.org用户信息后,打印对应的server信息: server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333 server 10.10.10.1 10.10.10.1 weight 22 maxconn 2000 server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000 增加功能: 当用户输入{"backend":"www.ali.org","record":{"server":1111,"weight":2222,"maxconn":3333}} 在www.ali.org下增加一条server信息,即文件中: backend www.ali.org server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333 删除功能 当用户输入{"backend":"www.ali.org","record":{"server":1111,"weight":2222,"maxconn":3333}} 会将www.ali.org下的server 1111 weight 2222 maxconn 3333删除, 在文件中如下: backend www.ali.org server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333 修改功能: 当用户输入{"backend":"www.ali.org","record":{"server":0000,"weight":0000,"maxconn":0000}} backend www.ali.org server 0000 weight 0000 maxconn 0000
配置文件:
global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 info defaults log global mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms option dontlognull listen stats :8888 stats enable stats uri /admin stats auth admin:1234 frontend oldboy.org bind 0.0.0.0:80 option httplog option httpclose option forwardfor log global acl www hdr_reg(host) -i www.ali.org use_backend www.ali.org if www backend www.oldboy1.org server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333 server 10.10.10.1 10.10.10.1 weight 22 maxconn 2000 server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000 backend www.oldboy2.org server 3.3.3.3 3.3.3.3 weight 20 maxconn 3000 backend www.oldboy20.org server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333
对文件对操作:
while True: print("1:增加") print("2:删除") print("3:修改") print("4:查看") number=input("input your namber:").strip() f_read=open("haproxy.conf",mode="r+", encoding="utf8") f_d=open("haproxy_delete.conf",mode="w", encoding="utf8") #删除文件所操作的文件 f_a=open("haproxy_add.conf",mode="w", encoding="utf8") #增加文件所操作的文件 f_m=open("haproxy_modify.conf",mode="w", encoding="utf8") #修改文件所操作的文件 flag = False add_flag = False list = [] #查询放入的列表 d_list = [] #删除放入的列表 a_list=[] m_list=[] if number=='4': print("look") look_input=input(">>:").strip() for line in f_read: if line.startswith("backend") and look_input in line: # 1,信息匹配 flag = True continue if flag and line.startswith("backend"): # 3,结束 break if flag: list.append(line.strip()) # 2,增加信息 for i in list: print(i) elif number =='3': print("modify") mo_flag = False mo_input = input(">>").strip() print(mo_input) mo_input = eval(mo_input) print(mo_input) str_mo = "server " + str(mo_input["record"]["server"]) + " weight " + str( mo_input["record"]["weight"]) + " maxconn " + str(mo_input["record"]["maxconn"]) print(str_mo) for line in f_read: if line.startswith("backend") and str(mo_input["backend"]) in line: m_list.append(line) mo_flag = True continue elif mo_flag and line.startswith("backend"): m_list.append(line) mo_flag=False elif mo_flag: # print(mo_flag) m_list.append("\t\t"+str_mo+"\n") elif mo_flag and line.count('\n')==len(line): continue else: m_list.append(line) # print(m_list) for i in m_list: f_m.write(i) f_m.close() elif number == '2': print("delete") del_flag=False del_input = input(">>").strip() del_input = eval(del_input) str_del = "server " + str(del_input["record"]["server"]) + " weight " + str( del_input["record"]["weight"]) + " maxconn " + str(del_input["record"]["maxconn"]) print(str_del) for line in f_read: if str(del_input["backend"]) in line and line.startswith("backend"): d_list.append(line) del_flag=True continue elif del_flag and str_del in line: continue else: d_list.append(line) # print(d_list) for i in d_list: f_d.write(i) f_d.close() elif number == '1': print("add") add_input = input(">>").strip() add_input = eval(add_input) str_add = "\t\tserver " + str(add_input["record"]["server"]) + " weight " + str( add_input["record"]["weight"]) + " maxconn " + str(add_input["record"]["maxconn"])+"\r\n" # print(str_add) for line in f_read: if line.startswith("backend") and str(add_input["backend"]) in line: add_flag = True a_list.append(line) # a_list.append("\n" + str_add) 在记录前插入 continue elif add_flag: print(add_flag) a_list.append(line) else: a_list.append(line) # a_list.append("\n" + str_add) for i in a_list: f_a.write(i) f_a.close() # {"backend": "www.ali.org", "record": {"server": 1111, "weight": 2222, "maxconn": 3333}} # server 1111 weight 2222 maxconn 3333 # {"backend": "www.ali.org", "record": {"server": 0000, "weight": 0000, "maxconn": 0000}}
空行判断
with open("大宗师诗号" ,mode="r",encoding="utf8") as fr: for line in fr: print(line.count("\n"),len(line))