difflib主要用于比较两个序列的不同,常见于字符串的比较,可以对差异生成报告。SequenceMatcher 主要用于找两者相似部分,以及两者不同的转换方法,而 Differ 更注重于比较两者的区别并标记,HtmlDiff 注重把两者的区别以 HTML 的形式表现出来
模块内定义了三个类:SequenceMatcher、Differ、HtmlDiff
1、Differ([linejunk[, charjunk]]):类初始化有两个可选参数 linejunk 接受一个只有一个字符串参数的函数,代表忽略的字符串,charjunk 接受一个单一字符的函数,代表忽略的字符
类内方法:
compare(a,b) :两个序列必须是单独的用 \n 分割的字符串,例如从 file.readlines() 获得。
2、HtmlDiff (tabsize=8, wrapcolumn=None, linejunk=None, charjunk=IS_CHARACTER_JUNK):类初始化有四个可选参数,tabsize=8,wrapcolumn=none,linejunk 和 charjunk 同上
类内方法:
make_file 和 make_table (fromlines, tolines [, fromdesc][, todesc][, context][, numlines]):对 fromlines 至 tolines 之间的文本进行比较,分别返回完整的 HTML 文件和表,from/todesc 代表文件头部字符串,一般为空,context 和 numlines 一般默认,红的都不懂。。
3、SequenceMatcher(isjunk=None, a='', b='', autojunk=True) :isjunk 可以为 none 或是接受一个单一序列的函数,该函数只会在元素符合垃圾时返回真。
类内方法:
set_seqs(a,b),set_seq1(a),set_seq2(b):类会对第二个序列对象进行计算并缓存详细信息,所以在对一个序列进行多次比较时,可以将其设置为第二个参数
find_longest_match(alo,ahi,blo,bhi):从 a[alo:ahi] 和 b[blo:bhi] 中找到最长的匹配
get_matching_blocks():返回三个元素的列表,包含第一个和最后一个的匹配,第三个元素是a,b的长度
get_opcodes():获得从a转变至b的方法,有4种方法('replace' , 'delete', 'equal', 'insert')
get_grouped_opcodes([n]):获得转变n行方法的生成器
ratio():a与b的相似度,如果没有运行过get_matching_blocks()或者get_opcodes(),这个方法很耗时间,可用以下两个方法代替
quick_ratio():快速的计算
real_quick_ratio():最快的计算,不准
模块内方法:
context_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm]):比较 a 和 b,返回一个 context diff 格式的生成器,将两个文件完全分开输出(每个文件的文件名在内容上方),在每行前面加上对应标记
ndiff(a, b[, linejunk][, charjunk]):比较 a 和 b,返回一个 Differ 格式的生成器,将两者差异逐行对比输出
unified_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm]):比较 a 和 b ,返回一个 unified_diff 格式的生成器,将两个文件部分分开输出(两个文件名在所有内容之前,文件内容以文件先后排列输出),在每行前面加上对应标记
get_close_matches(word, possibilities[, n][, cutoff]):从 possibilities 里挑选出最匹配 word 的元素,n 是返回最大个数,cutoff 是匹配阈值,低于它的不匹配,返回最优匹配结果,从大到小排列
restore(sequence, which):将从ndiff 或是Differ.compare() 生成的序列倒推回原序列,which值为1或2,代表第一/二个序列