对比两个文件(文本类文件)内容差异的一个可能的重要应用场景是使用发布系统发布新代码版本时,你或许希望在最后上线前,再次确认当前要发布的版本内容和线上内容相比,仅是发生你改动部分的变动,而不会错误地覆盖其他与之无关的内容。尽管我们有像svn、git这样的版本管理工具以及对应的丰富的客户端工具,但对比文件内容差异的功能经常被集成在发布系统中。
python有个difflib库,能高效地实现字符差异比对、文件内容差异比对。下面,我们就贴一个在结合django实现的简单的案例代码,供参考:
views.py
# -*- coding:utf-8 -*-from __future__ import unicode_literalsfrom django.shortcuts import renderfrom django.shortcuts import ', {'form': form})#html形式显示文件差异对比结果def makehtml(file_from,file_to):filefrom = open(file_from).read()fileto = open(file_to).read()filefrom_line = filefrom.splitlines()fileto_lines = fileto.splitlines()d = difflib.htmldiff()return
<!doctype html><html><head><meta charset=utf-8><title>file diff test</title></head><body><form name=upload method=post action= enctype=multipart/form-data>{% csrf_token %}<input type=file name=file_from><input type=file name=file_to><input type=submit></form></body></html>假如你对python生成的文件对比的html页面样式不太满意,是可以修改的,只要修改你安装的difflib组件里的difflib.py(比如,我在mac上安装,这个文件的路径是/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/difflib.py)文件内的_file_template、_styles、_table_template、_legend这几个变量的值就可以