一、兩個字符串的對比
1、兩個字符串的對比輸出
#!/bin/env python
import difflib
text1 = """text1:
This module provides classes and functions for comparing sequences v7.5"""
text1_lines = text1.splitlines()
text2 = """text2:
This module provides classes and functions for comparing sequences v7.4"""
text2_lines = text2.splitlines()
d = difflib.Differ()
diff = d.compare(text1_lines,text2_lines)
print '\n'.join(list(diff))
本示例採用Differ()類對兩個字符串進行比較,另外difflib的sequenceMatcher()類支持任意類型序列的比較,HtmlDiff()類支持將比較結果輸出爲HTML格式,示例運行結果如圖2-1所示
2、生成美觀的對比HTML格式文檔
採用HtmlDiff()類的make_file()方法就可以生成美觀的HTML文檔,對示例1中代碼按以下進行修改:
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)
將新文件命名爲diff2.py。運行#python diff2.py,再使用瀏覽器打開diff.html文件,結果如果2-2所示,HTML文檔包括了行號、差異標誌、圖例等信息,可讀性增強了許多。
二、兩個文件的對比
shell # vi diff3.py
#!/bin/env python
import difflib
import sys
try:
textfile1=sys.argv[1]
textfile2=sys.argv[2]
except Exception,e:
print "Error:"+str(e)
print "Usage: diff2.py filename1 filename2"
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:diff3.py filename1 finename2"
sys.exit()
text1_lines = readfile(textfile1)
text2_lines = readfile(textfile2)
d = difflib.HtmlDiff()
print d.make_file(text1_lines,text2_lines)
從圖2-3中可以看出diff.py和diff2.py的差別