码迷,mamicode.com
首页 > 其他好文 > 详细

练习—简单修改配置文件

时间:2016-01-03 18:23:16      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

1.文件

技术分享
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.oldboy.org
        use_backend www.oldboy.org if www

backend www.oldboy.org
        server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
View Code

2.需求

技术分享
复制代码
1、查
    输入:frontend oldboy.org
    获取当前配置下的所有记录

2、新建
    输入:
        arg = {
            bakend: www.oldboy.org,
            record:{
                server: 100.1.7.9,
                weight: 20,
                maxconn: 30
            }
        }

传入的格式:字典
            {"bakend": "ww.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}}

3、删除
    输入:frontend oldboy.org
删除该配置下所有记录
4、修改
    输入修改的配置名称:frontend oldboy.org
    输入修改后配置:格式(字典)

复制代码
View Code

3.实现

技术分享
  1 #!/usr/bin/env python
  2 # -*- coding:utf-8 -*-
  3 import json
  4 #查询配置文件
  5 def Fetch(context):
  6     contextli=[]
  7     with open(text.txt,r) as f:
  8         flag=False
  9         for i in f.readlines():
 10             line=(i).strip(\n)
 11             if line.find(context) != -1:#找输入字符串的下标,如果不等于-1,说明找到了,flag=True,开始往列表写入
 12                 flag=True
 13                 continue
 14             if flag:    #找到下标,flag=True后进入这里
 15                 if line.startswith( )==False: #如果找到开头不是空格的行,输出flag=False,不在写入
 16                     flag=False
 17             if flag==True:
 18                 contextli.append(line)  #把符合要求的值写入列表
 19     return contextli
 20 #添加配置文件
 21 def Add(dicdic):
 22     #dicdic=eval(dicdic) #把传入的字符串转换成字典
 23     for k, v in dicdic.items():
 24         if type(dicdic[k])==dict:   #如果传入的key对应的value是字典则把k,v的值给列表li
 25             li=[k,v]
 26         else:               #如果对应的value不是字典
 27             with open(text.txt,r+) as f:
 28                 for i in f.readlines():
 29                     line=(i).strip(\n)
 30                     if line.find(k+" "+v) != -1:#查看循环读出的行是否有传入的key,value,#如果有,则提示已存在,退出程序
 31                         print("已存在,不能添加")
 32                         exit()
 33                 li1=[k,v]               #把key和key对应的字典赋值给列表li1
 34                 f.write(\n+li1[0]+ +li1[1])
 35                 for k1,v1 in li[1].items():
 36                     f.write(\n+"".center(8)+str(k1)+ +str(v1))
 37                 return "添加成功"
 38 #修改配置文件
 39 def Amend(oldcontext,newcontext):
 40     with open(text.txt,r) as f:
 41         li=[]
 42         cost=0
 43         flag=True
 44         for line in f.readlines():
 45             if flag==True:
 46                 if line.find(oldcontext) == -1: #没找到要修改的内容之前把每行加入列表li
 47                     li.append(line)
 48                 else:
 49                     flag=False  #找到呀修改的内容之后返回flag=False,不在加入列表
 50                     cost=1  #找到修改的内容后进入下面的if else
 51                     continue
 52             if cost==1:
 53                 #newcontext=eval(newcontext)
 54                 for k, v in newcontext.items():
 55                     if type(newcontext[k])==dict:   #如果传入的字典里的key对应的是字典,则把key,value给列表li1
 56                         li1=[k,v]
 57                     else:
 58                         li2=[k,v]         #否则,赋给列表li2
 59                 aa=(\n+li2[0]+ +li2[1]) #把配置文件的开头先append到列表
 60                 li.append(aa)
 61                 for k1,v1 in li1[1].items(): #对key对应的字典进行循环
 62                     bb=(\n+"".center(8)+str(k1)+ +str(v1))  #按格式加到列表li
 63                     li.append(bb)
 64                 li.append(" ")
 65                 cost=cost+1 #不再进入这个if else
 66             if line.startswith( )==False: #如果找到不是空格开头的行,flag=True,继续进入第一个if else
 67                  flag=True
 68         o=open(text.txt,w)
 69         for i in li:
 70             o.write(i)  #把新列表的值重新写入文件
 71         o.close()
 72         return "修改成功"
 73 #移除配置文件
 74 def Remove(context):
 75     with open(text.txt,r+) as f:
 76         flag=True
 77         li=[]
 78         for line in f.readlines():
 79             if flag==True:
 80                 if line.find(context) == -1:#如果没用匹配,append到列表
 81                     li.append(line)
 82                 else:                   #找到要删除的关键字符,flag=False
 83                     flag=False
 84                     continue
 85             if flag==False:    #flag=False后进入这里
 86                 if line.startswith( )==False: #如果找到开头不是空格的行,输出flag=True
 87                     flag=True           #flag=True,跳会上面继续append到列表
 88         o=open(text.txt,w)
 89         for i in li:
 90             o.write(i)  #把列表的值重新写入文件
 91         o.close()
 92     return "删除成功"
 93 #主程序
 94 if __name__ == __main__:
 95     while True:
 96         print 1、获取;2、添加;3、删除;4、修改;q、退出
 97         num = raw_input(请输入序号:)
 98         if num == 1:
 99             data = raw_input(请输入内容:) #最好输入配置文件全部开头,避免重复,比如:frontend oldboy.org
100             for i in Fetch(data):
101                 print i
102         elif num == 2:
103             data = raw_input(请输入(字典):)
104             data=json.loads(data)   #str转换成字典
105             ‘‘‘
106             传入的格式:字典
107             {"bakend": "ww.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}}
108             ‘‘‘
109             print Add(data)
110         elif num == 3:
111             data = raw_input(请输入内容:)
112             print Remove(data)
113         elif num == 4:
114             data = raw_input(请输入修改的内容:)   #输入像查询一样的内容即可
115             data1 = raw_input(修改为(输入字典):) #输入字典
116             data1=json.loads(data1)
117             print Amend(data,data1)
118         elif num == q:
119             break
120         else:
121             print("输入错误,请重新输入")
View Code

 

练习—简单修改配置文件

标签:

原文地址:http://www.cnblogs.com/melonjiang/p/5096818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!