Python比较配置文件的方法实例详解


Posted in Python onJune 06, 2019

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

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

一般来说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比较配置文件的方法实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python使用reportlab画图示例(含中文汉字)
Dec 03 Python
Python中的CURL PycURL使用例子
Jun 01 Python
python里大整数相乘相关技巧指南
Sep 12 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
May 16 Python
Python优先队列实现方法示例
Sep 21 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
Python探索之ModelForm代码详解
Oct 26 Python
Python字符串拼接六种方法介绍
Dec 18 Python
Python实现文件信息进行合并实例代码
Jan 17 Python
对Python 2.7 pandas 中的read_excel详解
May 04 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
django和flask哪个值得研究学习
Jul 31 Python
Django中使用 Closure Table 储存无限分级数据
Jun 06 #Python
创建Django项目图文实例详解
Jun 06 #Python
Django网络框架之HelloDjango项目创建教程
Jun 06 #Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 #Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 #Python
浅析Python3中的对象垃圾收集机制
Jun 06 #Python
聊聊python里如何用Borg pattern实现的单例模式
Jun 06 #Python
You might like
PHP实现显示照片exif信息的方法
2014/07/11 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
Javascript的表单验证-揭开正则表达式的面纱
2016/03/18 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
JS防止网页被嵌入iframe框架的方法分析
2016/09/13 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
人生苦短我用python python如何快速入门?
2018/03/12 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
简单分析python的类变量、实例变量
2019/08/23 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
python matplotlib拟合直线的实现
2019/11/19 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
django使用channels实现通信的示例
2020/10/19 Python
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
粗加工管理制度
2014/02/04 职场文书
公司经理聘任书
2014/03/29 职场文书
深入详解JS函数的柯里化
2021/06/09 Javascript