帮同事写一个小程序 是要通过输入参数,直接替换一系列conf文件中的某些参数 以减少人工操作量
首先我是查到了python 里的ConfigParser 用来解析,因为这个库是可以直接引用 而不需要重新安装的
使用之后发现 将conf文件的大小写全部转换了。于是上网搜索了下 发现configParser有以下一堆问题:
1,不能区分大小写。
2,重新写入的ini文件不能保留原有INI文件的注释。
3,重新写入的ini文件不能保持原有的顺序。
4,不支持嵌套。
5,不支持格式校验。
于是果断抛弃,这个时候找到了另一个lib::configobj
这个库需要单独安装configobj 5.0.6 和six 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文件没有修改,以原样子进行了替换所需参数。
其实不算难,是自己基础不够扎实,花费了一些时间,半天的工作量,
又认识了一个库的用法,收获不小。