Python configobj模块处理conf文件(generate.py)

帮同事写一个小程序 是要通过输入参数,直接替换一系列conf文件中的某些参数 以减少人工操作量

首先我是查到了python 里的ConfigParser 用来解析,因为这个库是可以直接引用 而不需要重新安装的

使用之后发现 将conf文件的大小写全部转换了。于是上网搜索了下 发现configParser有以下一堆问题:

1,不能区分大小写。
2,重新写入的ini文件不能保留原有INI文件的注释。
3,重新写入的ini文件不能保持原有的顺序。
4,不支持嵌套。
5,不支持格式校验。

于是果断抛弃,这个时候找到了另一个lib::configobj

这个库需要单独安装configobj 5.0.6six 1.10.0两个库

Six is a Python 2 and 3 compatibility library

ConfigObj is a simple but powerful config file reader and writer:

 

安装完之后就可以直接使用

 

A: 解析文件:

 

 

fromconfigobjimport ConfigObj
#
conf_ini="./test.ini"
config=ConfigObj(conf_ini,encoding='UTF8')
#
# 读配置文件
#
printconfig['server']
printconfig['server']['servername']


B: 修改配置文件

 

 

 

fromconfigobjimport ConfigObj
#
conf_ini="./test.ini"
config=ConfigObj(conf_ini,encoding='UTF8')
config['server']['servername']="127.0.0.1"
config.write()


C:添加新项:

 

 

fromconfigobjimport ConfigObj
#
conf_ini="./test.ini"
config=ConfigObj(conf_ini,encoding='UTF8')
config['new_items']={}
config['new_items']['Items1']="test items"
config.write()

 

 

 

 

 

 

D: 删除项:

 

fromconfigobjimport ConfigObj
#
conf_ini="./test.ini"
config=ConfigObj(conf_ini,encoding='UTF8')
delconfig['client_srv']['port']
config.write()

 

 

 

 

 

 

E: 将配置文件写入到不同的文件:

 

fromconfigobjimport ConfigObj
#
conf_ini="./test.ini"
config=ConfigObj(conf_ini,encoding='UTF8')
delconfig['client_srv']['port']
config.filename="./test1.ini"
config.write()

 

 

 

 

 

 

我就需要修改文件,很快的完成了,但是发现这个时候 源文件等号两边多了空格,这就仍然改变了文件的格式,会导致后期别处做解析的整个步骤发生了改变。

不符合同事的需求,于是我就想办法要将等号两边的空格给去除。

使用replcase方法 直接replace(old,new)

 

for line in infopen.readlines():
            if line.find("="):
                line = line.replace(' ', '')

 

 

 

 

 

而此时需要将源文件重新写一边 以不同的名字,再重新命名为之前的名字 

定义在函数体内

 

def delblankline(infile,outfile):
        infopen = open(infile, 'r')
        outfopen = open(outfile, 'w')
        for line in infopen.readlines():
            if line.find("="):
                line = line.replace(' ', '')
            outfopen.writelines(line)
        infopen.close()
        outfopen.close()

 

 

最终完成,终于conf文件没有修改,以原样子进行了替换所需参数。

其实不算难,是自己基础不够扎实,花费了一些时间,半天的工作量,

又认识了一个库的用法,收获不小。
 

+ skyline-nginx-generator --output-file /etc/nginx/nginx.conf Traceback (most recent call last): File "/usr/local/bin/skyline-nginx-generator", line 8, in <module> sys.exit(main()) File "/usr/local/lib/python3.10/dist-packages/click/core.py", line 1161, in __call__ return self.main(*args, **kwargs) File "/usr/local/lib/python3.10/dist-packages/click/core.py", line 1082, in main rv = self.invoke(ctx) File "/usr/local/lib/python3.10/dist-packages/click/core.py", line 1443, in invoke return ctx.invoke(self.callback, **ctx.params) File "/usr/local/lib/python3.10/dist-packages/click/core.py", line 788, in invoke return __callback(*args, **kwargs) File "/usr/local/lib/python3.10/dist-packages/skyline_apiserver/cmd/generate_nginx.py", line 168, in main endpoints = get_proxy_endpoints() File "/usr/local/lib/python3.10/dist-packages/skyline_apiserver/cmd/generate_nginx.py", line 67, in get_proxy_endpoints endpoints_list = ks_client.endpoints.list(interface=CONF.openstack.interface_type) File "/usr/local/lib/python3.10/dist-packages/keystoneclient/v3/endpoints.py", line 120, in list return super(EndpointManager, self).list( File "/usr/local/lib/python3.10/dist-packages/keystoneclient/base.py", line 85, in func return f(*args, **new_kwargs) File "/usr/local/lib/python3.10/dist-packages/keystoneclient/base.py", line 446, in list list_resp = self._list(url_query, self.collection_key) File "/usr/local/lib/python3.10/dist-packages/keystoneclient/base.py", line 140, in _list resp, body = self.client.get(url, **kwargs) File "/usr/local/lib/python3.10/dist-packages/keystoneauth1/adapter.py", line 673, in get return self.request(url, 'GET', **kwargs) File "/usr/local/lib/python3.10/dist-packages/keystoneauth1/adapter.py", line 657, in request resp = self._request(url, method, **kwargs) File "/usr/local/lib/python3.10/dist-packages/keystoneauth1/adapter.py", line 294, in _request return self.session.req
最新发布
03-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝娃不蓝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值