python 配置文件对比_python3实现配置文件差异对比脚本

应用场景:配置文件由于升级改动了,我们想看看升级后的配置文件相对于之前的改动了哪些配置项

注意:这个脚本只能检测的配置文件是键值对的形式,就是key=value的形式

我在网上找了好久没找到这一块的案例,大部分都是用一些difflib库做的可视化对比,所以自己尝试写了一个

# 该脚本实现两个配置文件中,新文件相对于旧文件的增删改的配置项输出功能

# 配置文件必须是key = value的形式

import re

import sys

def data2list(file_stream):

"""

生成器

:param file_stream:接收打开的文件对象

:return:

"""

for line in file_stream:

line = line.strip()

if line == "" or line.startswith("#"): #过滤空行和注释

continue

line = line.split(" = ",1) #每行转为列表

line2tuple = tuple(line) #列表转元组

yield line2tuple #每次返回一个元组

def line_count(keywords, filename):

"""

:param keywords: 对比旧文件,在新文件中改变值的键名或新增的键

:return: 返回键所在的行号

:filename 文件名称

"""

with open(filename) as fp:

for index, line in enumerate(fp):

if keywords in line:

return index+1

#比较新文件中配置型值改变的和新增的配置

def compare_config():

"""

遍历新文件中的每个键是否在旧文件中存在,如果存在,则比较值是否相同,不相同则打印配置更新,和所在的位置

否则视为在新文件中新增的项

:return:

"""

global dict1,dict2

for k2 in dict2.keys():

k1 = list(dict1.keys())

if k2 in k1:

if dict2[k2] != dict1[k2]:

count = line_count(k2, file2)

print("配置项值更新:%s=%s-->%s=%s,位置在第%s行" %(k2, dict1[k2],k2, dict2[k2], count))

else:

count = line_count(k2,file2)

print("新增配置项:%s=%s,位置在第%s行" %(k2, dict2[k2], count))

# 新文件中删除了哪些项,在旧文件中有,在新文件中没有的项

set1 = set(dict1.keys())

set2 = set(dict2.keys())

deleteKeys = set1 - set2

for k1 in deleteKeys:

count = line_count(k1, file1)

print("新文件中删除了以下配置:%s=%s,位置在旧文件中的第%s行" %(k1, dict1[k1],count))

if __name__ == '__main__':

try:

file1 = sys.argv[1]

file2 = sys.argv[2]

except:

print("userage:xxx.py oldfile newfile")

sys.exit(1)

fp1 = open(file1)

fp2 = open(file2)

#通过生成器的具有迭代器特点,遍历来生成一个列表,列表中嵌套了数组,每个数组里面村了每行的数据

gen1 = data2list(fp1)

list1 = []

for i in gen1:

list1.append(i)

dict1 = dict(list1) # dict函数可以把列表中嵌套的元组转为字典

gen2 = data2list(fp2)

list2 = []

for i in gen2:

list2.append(i)

dict2 = dict(list2)

fp1.close()

fp2.close()

compare_config()

测试结果如下:

准备两个文件

file1

file2:

运行: config_compare.py file1 file2

输出比较结果:

配置项值更新:age=19-->age=20,位置在第3行

配置项值更新:gender=man-->gender=female,位置在第4行

配置项值更新:apple=5-->apple=6,位置在第6行

新增配置项:peach=2,位置在第9行

新增配置项:hello=world,位置在第11行

新增配置项:language=english,位置在第12行

新文件中删除了以下配置:banana=3,位置在旧文件中的第8行

新文件中删除了以下配置:name=wangtao,位置在旧文件中的第2行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值