练习—简单修改配置文件

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

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
    输入修改后配置:格式(字典)

复制代码

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("输入错误,请重新输入")

时间: 2024-10-16 22:10:01

练习—简单修改配置文件的相关文章

sed 简单修改配置文件ip地址

sed -i 's/old ip/new ip/g' file.txt

Unity3D 使用XML进行简单的配置文件修改

1.首先是看看效果图: 开始运行项目如下图所示 2.点击绿色按钮修改配置文件再点击修改按钮成功修改方块颜色 3.接了下是实现的过程: 首先在Hierarchy创建一个cube,其次在Assets下分别创建Scenes和Scripts文件夹,分别是用来保存的的当前的场景和我们所写的脚本.在Scripts文件夹下面右键创建一个C#脚本,接我们在脚本里面开始创建一个XML文件和对应的文件夹.在外部声明一个private string m_sXmlPath;用来显示xml路径,接着在Start()方法中

在Openfire中使用自己的数据表之修改配置文件

目前我使用的Openfire版本是3.10.3,以下使用说明也是在这个版本上做的修改. Openfire提供了两种方式使用用户数据表.一种是安装完成之后默认实现的org.jivesoftware.openfire.user.DefaultUserProvider,一种是org.jivesoftware.openfire.user.JDBCUserProvider,同样对于用户验证也提供了默认实现的org.jivesoftware.openfire.auth.DefaultAuthProvider

修改配置文件haproxy

文件内容 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

修改配置文件matplotlibrc,让Matplotlib显示中文

matplotlib默认不支持中文显示,网上的解决办法有好多种,但是大多数都是通过在代码中指定字体,虽然也能实现,但是多出那么几行代码让人觉得很恶心. 本文介绍一种通过修改配置文件matplotlibrc,让Matplotlib显示中文的方法:在win7,Python2.7.9测试通过 第一步:将中文字体复制到matplotlib的字体目录中 中文字体以微软雅黑为例,在 C:\Windows\Fonts 下面找到“微软雅黑”字体.matplotlib默认安装在 %PythonPath%\Lib\

简单修改cramfs

首先进入root用户,确保LINUX系统下装有cramfsprogs,没有的话get-apt install cramfsprogs, 找到.cramfs文件,输入命令cramfsck -x song xxx.cramfs,然后当前目录下就会出现一个叫song 的目录,进入找到要修改的东西修改,如果有解压包记得打包解包的命令并且不要打包的时候打包错了, 最后回到song 的当前目录下,输入命令mkcramfs song song.cramfs,就制作出了自己要的CRAMFS文件系统了. 简单修改

第一个shell脚本——修改配置文件

有需求,可以让自己偷懒才是学习的真正动力.由于测试环境在构建代码之后总是需要手动修改配置文件,因此边学习边完成了一个shell脚本,可以一键修改. 定义了一个函数,输出信息以绿色字体显示. function echo_green { echo -e "\033[32m$1\033[0m" } 输出提示信息 echo_green "是否一键修改xxx?(y/n)" 读取键盘输入 read answer 要修改的配置文件有两类:一类是明确清楚应该修改哪些字符串,直接用替

如何修改配置文件:CentOS下SSH端口修改

CentOS各发行版中SSH端口默认为22,如果正式做站或其它用途,为了提高安全性就需要修改掉默认的SSH端口号,防止被有心人穷举密码.部分VPS提供商,若您的VPS服务器SSH遭受多次的暴力破解,可能会遭到罚款或临时终止服务,所以修改SSH的默认端口是有必要的. 有的朋友不知道“穷举”是什么意思,这里给这些朋友扫盲下 : 穷举法,或称为暴力破解法,是一种针对于密码的破译方法,即将密码进行逐个推算直到找出真正的密码为止.例如一个已知是四位并且全部由数字组成的密码,其可能共有10000种组合,因此

Linux网络属性配置—修改配置文件

修改配置文件 1.ip.MASK.GW.DNS配置文件的位置: /etc/sysconfig/network-scripts/ifcfg-IFACE [[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet 接口类型,常见的有ETHERNET(以太网).Bridge(桥接接口) BOOTPROTO=dhcp 激活此接口使用什么协议来配置接口属性:dhcp,boot,static,none