# -*- coding: utf-8 -*-
import sys, os, difflib, argparse
from datetime import datetime, timezone
def read_file(file_name):
try:
with open(file_name, 'r') as f:
text = f.read().splitlines() # 读取后按行分割
return text
except IOError as error:
print(f"read input file error {error}")
sys.exit()
def file_mtime(path):
t = datetime.fromtimestamp(os.stat(path).st_mtime, timezone.utc)
return t.astimezone().isoformat()
def main():
parser = argparse.ArgumentParser(description="传入两个待比较文件")
parser.add_argument('-c', action='store_true', default=False,
help='Produce a context format diff (default)')
parser.add_argument('-u', action='store_true', default=False,
help='Produce a unified format diff')
parser.add_argument('-m', action='store_true', default=False,
help='Produce HTML side by side diff '
'(can use -c and -l in conjunction)')
parser.add_argument('-n', action='store_true', default=False,
help='Produce a ndiff format diff')
parser.add_argument('-l', '--lines', type=int, default=3,
help='Set number of context lines (default 3)')
parser.add_argument('fromfile')
parser.add_argument('tofile')
options = parser.parse_args()
n = options.lines
fromfile = options.fromfile
tofile = options.tofile
fromdate = file_mtime(fromfile)
todate = file_mtime(tofile)
fromlines = read_file(fromfile)
tolines = read_file(tofile)
if options.u:
diff = difflib.unified_diff(fromlines, tolines, fromfile, tofile, fromdate, todate, n=n)
elif options.n:
diff = difflib.ndiff(fromlines, tolines)
elif options.m:
diff = difflib.HtmlDiff().make_file(fromlines, tolines,fromfile, tofile, context=options.c, numlines=n)
else:
diff = difflib.context_diff(fromlines, tolines, fromfile, tofile, fromdate, todate, n=n)
# sys.stdout.writelines(diff)
#生成比对结果文件
try:
with open('result_comparation.html', 'w') as f:
f.writelines(diff)
print("Successfully created\n")
except IOError as error:
print(f"写入html文件错误{error}")
if __name__ == '__main__':
main()
执行:
结果: