工作中最常见的配置文件有四种:普通key=value的配置文件、Json格式的配置文件、HTML格式的配置文件以及YAML配置文件。

这其中以第一种居多,后三种在成熟的开源产品中较为常见,本文只针对第一种配置文件。

一般来说Linux shell下提供了diff命令来比较普通文本类的配置文件,Python的difflib也提供了str和HTML的比较接口,但是实际项目中这些工具其实并不好用,主要是因为我们的配置文件并不是标准化统一化的。

为了解决此类问题,最好针对特定的项目写特定的配置文件比较工具,这样在版本发布时会很有用处。

其他话懒的说了,直接贴代码:

#!/usr/bin/python
#coding=utf-8 '''
此脚本适用于比较key=value格式的配置文件
使用方式为:
config_match.py old_file new_file
最终会将new_file中的新增配置项添加入old_file中,old_file中已有的配置项不会做任何改变。
''' import re
import os,sys
reload(sys)
sys.setdefaultencoding("utf-8") try:
old_file = sys.argv[1]
new_file = sys.argv[2]
except Exception,e:
print("Error:" +str(e))
print("Usage: config_match.py old_file new_file")
sys.exit() def list2dict(file):
with open(file,'r') as f:
list=f.readlines()
#遍历str list,排除空行和以#开头的str,使用split将str元素转为[k,v]元素
for e in list[0:]:
if re.match('^#',e) or re.match('^$',e):
list.remove(e)
i=0
for e in list:
e_split=e.strip().split('=')
if len(e_split)==2:
k,v=e.strip().split('=')
list[i]=[k,v]
else:
pass
i=i+1
#至此list变为了[[k,v],[k,v],...]这样的list
#包含多个=号或者不包含=号的配置项会被忽略,这点要注意
return dict(list) old_dict=list2dict(old_file)
new_dict=list2dict(new_file) '''
遍历新配置文件,将新增配置项加入conf_need_added{}字典中,然后将conf_need_added{}字典以k=v格式append入旧文件中。
如果重复的键值也需要更新那就太简单了,dict类型自带的update()方法就可以很好的完成任务,根本无需这么折腾了。
'''
conf_need_added={}
for k,v in new_dict.items():
if k not in old_dict.keys():
conf_need_added[k]=v
else:
pass with open(old_file,'a') as f:
for k,v in conf_need_added.items():
f.write('\n#以下为新增配置项:\n')
f.write(str(k)+'='+str(v)+'\n')

Python比较配置文件的更多相关文章

  1. python读取配置文件的方式

    python读取配置文件的方式 1.从config.ini中读取,后缀无所谓,文件名字也无所谓,不过config.ini是常用写法,所谓见名知意 config.ini内容: [global] ip = ...

  2. python 读写配置文件

    使用python读写配置文件,写个demo测试一下. #!/usr/bin/env python import os import ConfigParser # 如果文件不存在,就穿件文件. if o ...

  3. python 读取配置文件总是报错 configparser.NoSectionError: No section:

    本文为作者原创,禁止转载,违者必究法律责任!!! python 读取配置文件总是报错 configparser.NoSectionError: No section: 无论是 python2的版本,还 ...

  4. Python解析配置文件模块:ConfigPhaser

    算是前几周落下的博客补一篇.介绍一下python中如何解析配置文件.配置文件常用的几种格式:xml,json,还有ini.其中ini算是最简单的一种格式,因为小,解析的速度也要比xml和json快(并 ...

  5. 【python】配置文件

    来源:http://developer.51cto.com/art/201003/189885.htm python 读写配置文件在实际应用中具有十分强大的功能,在实际的操作中也有相当简捷的操作方案, ...

  6. python读取配置文件(ini、yaml、xml)

    python读取配置文件(ini.yaml.xml)  

  7. Python之配置文件模块 ConfigParser

    写项目肯定用的到配置文件,这次学习一下python中的配置文件模块 ConfigParser 安装就不说了,pip一下即可,直接来个实例 配置文件 project.conf [db] host = ' ...

  8. python读取配置文件&&简单封装

    之前有做过把爬虫数据写到数据库中的练习,这次想把数据库信息抽离到一个ini配置文件中,这样做的好处在于可以在配置文件中添加多个数据库,方便切换(另外配置文件也可以添加诸如邮箱.url等信息) 1.co ...

  9. Python进阶-配置文件

    一. 什么是配置文件?为什么要做配置文件? 将所有的代码和配置都变成模块化可配置化,这样就提高了代码的重用性,不再每次都去修改代码内部,这个就是我们逐步要做的事情,可配置化 二. 配置文件长啥样? 配 ...

  10. python模块之ConfigParser: 用python解析配置文件

    在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser,这里简单的做一些介 ...

随机推荐

  1. php有必要用swoole吗

    在 Swoole 官网的自我介绍是“面向生产环境的 PHP 异步网络通信引擎”,首先 Swoole 它是一个网络应用的开发工具,它支持 Http.TCP.UDP.WebSocket. Swoole 和 ...

  2. C# Parallel 多线程并发

    Parallel并发执行多个任务 多线程的,主线程会参与计算---阻塞界面等于TaskWaitAll+主线程计算 常用方法 1.Invoke  尽可能并行执行提供的每个操作 Console.Write ...

  3. Microsemi Libero使用技巧——使用第三方编辑器Notepad++

    前言 与Xilinx的ISE和Altera的Quartus一样,Microsemi的编辑器也支持指定第三方编辑器. Microsemi自带的编辑器,没有自动补全功能,也不支持中文注释,非常不好用,为了 ...

  4. asp.net core使用serilog将日志推送到腾讯云日志服务

    为什么是serilog? Serilog是 .NET 中最著名的结构化日志类库. 基于日志事件log events,而不是日志消息log message. 你可以将日志事件格式化为控制台的可读文本或者 ...

  5. Oracle模糊查询CONCAT参数个数无效

    在使用MyBatis操作Oracle数据库的时候,写模糊查询突然发现原本在MySql中正确的代码,在Oracle中报错,参数个数无效 <if test="empId!=null and ...

  6. C# transfer local file to remote server based on File.Copy

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...

  7. PlayJava Day023

    进程:进程是程序的一次动态执行过程,它经历了从代码加载.执行到执行完毕的一个完整过程,这个过程也是进程本身从产生.到发展到最终消亡的过程 多进程:多进程操作系统能同时运行多个进程(程序) 多线程:是指 ...

  8. MyBatis框架之第三篇

    8.Spring与Mybatis整合 框架的整合就是软件之间的集成,它很抽象,因此在做整合之前先想好思路.规划好思路然后按照思路一步一步的做就可以实现框架的整合. 8.1.SM整合思路 8.1.1.思 ...

  9. JavaScript设计模式基础(一)

    模式的起源 模式 起源于建筑学.20世纪70年代,哈佛大学建筑学博士Christopher Alexander和他的团队花大约20年,来研究为解决同一个问题而设计出的不同建筑结构,从中发现那些高质量设 ...

  10. UI_DEV_Environment 之 StoryBook

    写在前面 由于本文主要集中关注与工具使用,所以不可能完全介绍工具的所有功能,所以要想了解更多,可以自己去各自官方网站上查看. github examples 什么是UI开发环境 UI开发环境专注于用户 ...