文件内容差异对比

来源:互联网 发布:开一个网络主播工作室 编辑:程序博客网 时间:2024/04/30 18:16

difflib模块实现文件内容差异对比,difflib是python的标准库,对比文件之间差异。且支持输出可读性较强的HTML文档,与linux下的diff命令相似。difflib对比代码,配置文件的差别。
这里要介绍一个函数
splitlines() 按行进行分割,返回一个以各行内容为元素的列表
join() 将列表中的元素以指定字符连接成一个新的字符串。
difflib.Differ()创建一个Differ对象
compare()对字符串进行比较
`
import difflib
text1 = “”“text1:
This modlue provides classes and functions for comparing swquences.
including HTML and context and unified diffs.
difflib docment
add string
“””
text1_lines = text1.splitlines()
text2 = “”“text2:
This module provides classes and functions for Comparing sequences
including HTML and context and unified diffs.
difflib document v7.5
“””
text2_lines = text2.splitlines()
d = difflib.Differ()
diff = d.compare(text1_lines, text2_lines)
print ‘\n’.join(list(diff))

`

这里写图片描述

‘-’:包含在第一个序列行中,但不包含在第二个序列行中
‘+’:包含在第二个序列中,但不包含在第一个中
‘’:两个序列一致
‘?’:两个序列行存在增量差异
‘^’:两个序列行存在差异字符
这样的表示我们看的不真切。
我们可以将
d = difflib.Differ()
diff = d.compare(text1_lines, text2_lines)
print '\n'.join(list(diff))

替换成
d = difflib.HtmlDiff()
print d.make_file(text1_lines, text2_lines)

接下来给出一段代码是用来比较两个文件差异的。
`
import difflib
import sys

try:
textfile1 = sys.argv[1]
textfile2 = sys.argv[2]
except Exception, e:
print “Error: ” + str(e)
print “Usage: python diff_tow_file.py filename1 filename2 > info.html”
sys.exit()

def readfile(filename):
try:
fileHandle = open(filename, “rb”)
text = fileHandle.read().splitlines()
fileHandle.close()
return text
except IOError as error:
print (‘Read file Error:’ + str(error))
sys.exit()

if textfile1 == “” or textfile2 == “”:
print “Usage: python diff_tow_file.py filename1 filename2 > info.html”
sys.exit()
text1_lines = readfile(textfile1)
text2_lines = readfile(textfile2)
d = difflib.HtmlDiff()
print d.make_file(text1_lines, text2_lines)

运行时用
python diff_two_file.py file1 file2 > info.html`

0 0
原创粉丝点击