一 前言
因为项目测试需要对比多个MySQL 实例的my.cnf文件中参数的差异。每次肉眼查找差异项比较麻烦。本文总结两种方式。
二 实践
2.1 vimdiff
vimdiff 工具比较直接非常简单。
vimdiff file1 file2
2.2 利用 python difflib 模块
代码语言:javascript复制#!coding=utf-8
import sys
import difflib
import argparse
def read_file(file_name):
try:
file_handle = open(file_name, 'r')
text = file_handle.read().splitlines()
file_handle.close()
return text
except IOError as error:
print('Read file Error: {0}'.format(error))
sys.exit()
def compare_file(file1_name, file2_name):
if file1_name == "" or file2_name == "":
sys.exit()
text1_lines = read_file(file1_name)
text2_lines = read_file(file2_name)
diff = difflib.HtmlDiff()
result = diff.make_file(text1_lines, text2_lines)
try:
with open('result.html', 'w') as result_file:
result_file.write(result)
except IOError as error:
print('写入html文件错误:{0}'.format(error))
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='compare_mycnf.py -s file1 -d file2 ')
parser.add_argument('-s', dest='source_file', type=str, help='源文件')
parser.add_argument('-d', dest='dest_file', type=str, help='目标文件')
args = parser.parse_args()
if not args.source_file or not args.dest_file:
print("源文件或者目标文件为空")
parser.usage()
source_file = args.source_file
dest_file = args.dest_file
compare_file(source_file, dest_file)
代码语言:javascript复制
在浏览器中打开 result.html 文件的结果如下图展示。
三 小结
目前只能做到两个文件直接对比,如果需要对比多个文件的还得再想想如何对比或者展示差异化的值。
祝大家 国庆节 假期愉快 ^_^