python difflib模塊示例講解
difflib模塊提供的類和方法用來進行序列的差異化比較,它能夠比對文件并生成差異結果文本或者html格式的差異化比較頁面,如果需要比較目錄的不同,可以使用filecmp模塊。
class difflib.SequenceMatcher
此類提供了比較任意可哈希類型序列對方法。此方法將尋找沒有包含‘垃圾'元素的最大連續(xù)匹配序列。
通過對算法的復雜度比較,它由于原始的完形匹配算法,在最壞情況下有n的平方次運算,在最好情況下,具有線性的效率。
它具有自動垃圾啟發(fā)式,可以將重復超過片段1%或者重復200次的字符作為垃圾來處理。可以通過將autojunk設置為false關閉該功能。
class difflib.Differ
此類比較的是文本行的差異并且產(chǎn)生適合人類閱讀的差異結果或者增量結果,結果中各部分的表示如下:
class difflib.HtmlDiff
此類可以被用來創(chuàng)建HTML表格 (或者說包含表格的html文件) ,兩邊對應展示或者行對行的展示比對差異結果。
make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])
make_table(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])
以上兩個方法都可以用來生成包含一個內(nèi)容為比對結果的表格的html文件,并且部分內(nèi)容會高亮顯示。
difflib.context_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])
比較a與b(字符串列表),并且返回一個差異文本行的生成器
示例:
>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n'] >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n'] >>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'): ... sys.stdout.write(line) *** before.py --- after.py *************** *** 1,4 **** ! bacon ! eggs ! ham guido --- 1,4 ---- ! python ! eggy ! hamster guido
difflib.get_close_matches(word, possibilities[, n][, cutoff])
返回最大匹配結果的列表
示例:
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy']) ['apple', 'ape'] >>> import keyword >>> get_close_matches('wheel', keyword.kwlist) ['while'] >>> get_close_matches('apple', keyword.kwlist) [] >>> get_close_matches('accept', keyword.kwlist) ['except']
difflib.ndiff(a, b[, linejunk][, charjunk])
比較a與b(字符串列表),返回一個Differ-style 的差異結果
示例:
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1), ... 'ore\ntree\nemu\n'.splitlines(1)) >>> print ''.join(diff), - one ? ^ + ore ? ^ - two - three ? - + tree + emu
difflib.restore(sequence, which)
返回一個由兩個比對序列產(chǎn)生的結果
示例
>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1), ... 'ore\ntree\nemu\n'.splitlines(1)) >>> diff = list(diff) # materialize the generated delta into a list >>> print ''.join(restore(diff, 1)), one two three >>> print ''.join(restore(diff, 2)), ore tree emu
difflib.unified_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])
比較a與b(字符串列表),返回一個unified diff格式的差異結果.
示例:
>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n'] >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n'] >>> for line in unified_diff(s1, s2, fromfile='before.py', tofile='after.py'): ... sys.stdout.write(line) --- before.py +++ after.py @@ -1,4 +1,4 @@ -bacon -eggs -ham +python +eggy +hamster guido
實際應用示例
比對兩個文件,然后生成一個展示差異結果的HTML文件
#coding:utf-8 ''' file:difflibeg.py date:2017/9/9 10:33 author:lockey email:lockey@123.com desc:diffle module learning and practising ''' import difflib hd = difflib.HtmlDiff() loads = '' with open('G:/python/note/day09/0907code/hostinfo/cpu.py','r') as load: loads = load.readlines() load.close() mems = '' with open('G:/python/note/day09/0907code/hostinfo/mem.py', 'r') as mem: mems = mem.readlines() mem.close() with open('htmlout.html','a+') as fo: fo.write(hd.make_file(loads,mems)) fo.close()
運行結果:
生成的html文件比對結果:
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
如何一分鐘內(nèi)找出pandas DataFrame某列中的nan值
這篇文章主要介紹了如何一分鐘內(nèi)找出pandas DataFrame某列中的nan值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09python網(wǎng)絡編程之讀取網(wǎng)站根目錄實例
這篇文章主要介紹了python網(wǎng)絡編程之讀取網(wǎng)站根目錄實例,以quux.org站根目錄為例進行了實例分析,代碼簡單易懂,需要的朋友可以參考下2014-09-09