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文件没有修改,以原样子进行了替换所需参数。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蓝娃不蓝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值