为什么写这个
在现实的开发过程中,经常出现如下的实际情况: 如运维过程中。
ali云的资源经常变化,本地cmdb资源也要随着变化。如何才能保证线上和cmdb数据库中数据一致呢, 这个时候就需要进行 定时同步线上资源列表。
如新增了一台机器。
将线上资源整理成json字符串dist_data, mysql数据库中的资源列表整理成source_data, 将source_data和dist_data进行比较,看资源发生了什么变化。
代码实现
# -*- coding: utf-8 -*-
# 简单比较
dict1 = {"id": "123", "name": "班级优化", "test":"testvalue"}
dict2 = {"id": "123", "name": "班级优化2", "zzz": "bbbb"}
for src, dest in zip(sorted(dict1),sorted(dict2)):
if str(dict1[src]) != str(dict2[dest]):
print(src, dict1[src], dict2[dest])
print("#"*50)
# 递归复制比较
dict3 = {"id": "503", "name": "班级优化", "info": {"uid":"2017","stuName":["张三","李四"]}, "teacher": "lilaoshi"}
dict4 = {"id": "503", "test": "AAAAA", "name": "班级优化2", "info": {"uid":"2017","stuName":["张三","赵五", "王麻子"]}, "student": "zhangsan"}
def cmp(src_data, dest_data):
if isinstance(src_data, dict):
for key in dest_data:
if key not in src_data:
print("src key is not exist: " + key)
for key in src_data:
if key in dest_data:
cmp(src_data[key], dest_data[key])
elif isinstance(src_data, list):
if len(src_data) != len(dest_data):
print("sub list value is not same")
for src_list , dest_list in zip(sorted(src_data), sorted(dest_data)):
cmp(src_list, dest_list)
else:
if str(src_data) != str(dest_data):
print("src value is not exist: " + src_data)
cmp(dict4,dict3)