首页 > 代码库 > Python基础-文件操作

Python基础-文件操作

一、项目需求
1、查询:根据输入指定域名,查看haproxy.conf配置文件内backend的详细信息
2、修改:根据输的域名和backend内的IP地址,修改每条backend的权值和最大连接数
3、增加:根据谁的域名,在该域名的backend下增加一条server记录
4、删除:根据输入的域名,删除该域名下的backend内的一条server记录

二、haproxy.conf的原文件如下:

  

技术分享
 1 global
 2         log 127.0.0.1 local2
 3         daemon
 4         maxconn 256
 5         log 127.0.0.1 local2 info
 6 defaults
 7         log global
 8         mode http
 9         timeout connect 5000ms
10         timeout client 50000ms
11         timeout server 50000ms
12         option  dontlognull
13 
14 listen stats :8888
15         stats enable
16         stats uri       /admin
17         stats auth      admin:1234
18 
19 frontend oldboy.org
20         bind 0.0.0.0:80
21         option httplog
22         option httpclose
23         option  forwardfor
24         log global
25         acl www hdr_reg(host) -i www.oldboy.org
26         use_backend www.oldboy.org if www
27 
28 backend www.oldboy1.org
29         server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333
30         server 10.10.10.1 10.10.10.1 weight 22 maxconn 2000
31         server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000
32 backend www.oldboy2.org
33         server 3.3.3.3 3.3.3.3 weight 20 maxconn 3000
34 backend www.oldboy20.org
35         server 10.10.0.10 10.10.0.10 weight 9999 maxconn 333333333
View Code

 

三、代码如下:

  

技术分享
  1 #!/usr/bin/env python
  2 #-*- coding:utf-8 -*-
  3 
  4 def pr():
  5     print("请选择需要的操作:")
  6     print("1、查询")
  7     print("2、删除")
  8     print("3、添加")
  9     print("4、修改")
 10 
 11 def query():
 12     while True:
 13         flag=False
 14         name = input("请输入要查询的域名:").strip()
 15         with open("haproxy.conf",encoding="utf8") as f_read:
 16             for line in f_read:
 17                 if line.startswith("backend") and name in line:
 18                     flag= True
 19                     continue
 20                 if line.startswith("backend") and flag:
 21                     flag=False
 22                     continue
 23                 if flag:
 24                     print(line)
 25         if name == "quit":
 26             break
 27 
 28 
 29 def modification():
 30     dic = {"backend": "", "server": "", "weight": "", "maxconn": ""}
 31     dic["backend"] = input("请输入需要修改的域名:").strip()
 32     dic["server"] = input("请输入需要此域名的ip:").strip()
 33     dic["weight"] = input("请输入需要此域名weight修改为:").strip()
 34     dic["maxconn"] = input("请输入需要此域名maxconn修改为:").strip()
 35     flag=False
 36     list = []
 37     with open("haproxy.conf",encoding="utf8") as f_read,open("haproxy_new.conf",mode="w",encoding="utf8") as f_write:
 38         for line in f_read:
 39             if line.startswith("backend") and dic["backend"] in line:
 40                 f_write.write(line)
 41                 flag=True
 42                 continue
 43             if "backend" in line and flag:
 44                 for i in list:
 45                     if dic["server"] in i:
 46                         i = "        server " + dic["server"] + " weight " + dic["weight"] + " maxconn " + dic[
 47                             maxconn] + "\n"
 48                     f_write.write(i)
 49                 flag=False
 50             if flag:
 51                 list.append(line)
 52             if flag==False:
 53                 f_write.write(line)
 54 
 55 def add():
 56     dic = {"backend": "", "server": "", "weight": "", "maxconn": ""}
 57     dic["backend"] = input("请输入需要添加到的域名:").strip()
 58     dic["server"] = input("请输入需要添加的ip:").strip()
 59     dic["weight"] = input("请输入需要添加的weight:").strip()
 60     dic["maxconn"] = input("请输入需要添加的maxconn:").strip()
 61 
 62     flag=False
 63     list=[]
 64     with open("haproxy.conf",encoding="utf8") as f_read,open("haproxy_new.conf",mode="w",encoding="utf8") as f_write:
 65         for line in f_read:
 66             if line.startswith("backend") and dic["backend"] in line:  #判断输入的域名的行
 67                 f_write.write(line)
 68                 flag=True
 69                 continue
 70             if "backend" in line and flag:    #判断下一个backend
 71                 list.append("        server  "+dic["server"]+dic["server"]+  "weight "+dic["weight"]+" maxconn "+dic[maxconn]+"\n")
 72                 #到这一行后,把输入要添加的内容插入到列表中,然后循环列表,把所有的内容都添加到新生成的文件中
 73                 for i in list:
 74                     f_write.write(i)
 75                 flag=False
 76             if flag:
 77                 list.append(line)
 78             if flag==False:   #最先满足的条件是这个,前面的都直接插入到新文件中
 79                 f_write.write(line)
 80 
 81 def delete():
 82     dic = {"backend": "", "server": "", "weight": "", "maxconn": ""}
 83     dic["backend"] = input("请输入需要删除的域名:").strip()
 84     dic["server"] = input("请输入此域名的ip:").strip()
 85     dic["weight"] = input("请输入此域名的weight:").strip()
 86     dic["maxconn"] = input("请输入此域名的maxconn:").strip()
 87     flag = False
 88     list = []
 89     with open("haproxy.conf", encoding="utf8") as f_read, open("haproxy_new.conf", mode="w", encoding="utf8") as f_write:
 90         for line in f_read:
 91             if line.startswith("backend") and dic["backend"] in line:  #判断输入的域名的行
 92                 f_write.write(line)
 93                 flag=True
 94                 continue
 95             if "backend" in line and flag:    #判断下一个backend
 96                 for i in list:
 97                     if dic["server"] in i and dic["weight"] in i and dic["maxconn"] in i:
 98                         continue
 99                     f_write.write(i)
100                 flag=False
101             if flag:
102                 list.append(line)
103             if flag==False:   #最先满足的条件是这个,前面的都直接插入到新文件中
104                 f_write.write(line)
105 
106 def choice():
107     pr()
108     num=int(input("请输入选择:").strip())
109     if num == 1:
110         query()
111     elif num == 2:
112         delete()
113     elif num == 3:
114         add()
115     elif num==4:
116         modification()
117     else:
118         print("输入有误,请重新输入!!")
119 
120 choice()
View Code

 

Python基础-文件操作