Python | 对比文件内容差异

2021-10-18 15:47:59 浏览数 (1)

一 前言

因为项目测试需要对比多个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 文件的结果如下图展示。

三 小结

目前只能做到两个文件直接对比,如果需要对比多个文件的还得再想想如何对比或者展示差异化的值。

祝大家 国庆节 假期愉快 ^_^

0 人点赞