python difflib模組示例講解

2022-10-03 11:42:08 字數 3788 閱讀 2382

difflib模組提供的類和方法用來進行序列的差異化比較,它能夠比對檔案並生成差異結果文字或者html格式的差異化比較頁面,如果需要比較目錄的不同,可以使用filecmp模組。

class difflib.sequencematcher

此類提供了比較任意可雜湊型別序列對方法。此方法將尋找沒有包含『垃圾'元素的最大連續匹配序列。

通過對演算法的複雜度比較,它由於原始的完形匹配演算法,在最壞情況下有n的平方次運算,在最好情況下,具有線性的效率。

它具有自動垃圾啟發式,可以將重複超過片段1%或者重複200次的字元作為垃圾來處理。可以通過將autojunk設定為false關閉該功能。

class difflib.differ

此模擬較的是文字行的差異並且產生適合人類閱讀的差異結果或者增量結果,結果中各部分的表示如下:

class difflib.htmldiff

此類可以被用來建立html** (或者說包含**的html檔案) ,兩邊對應展示或者行對行的展示比對差異結果。

make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

make_table(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])

以上兩個方法都可以用來生成包含乙個內容為比對結果的**的html檔案,並且部分內容會高亮顯示。

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(www.cppcns.comword, 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.

['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)

返回乙個由兩個比對序列產生的結果

示例>>> 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(restor程式設計客棧e(diff, 1)),

onetwo

three

>>> print ''.join(restore(diff, 2)),

oretree

emudifflib.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:[email protected]

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/hostinf程式設計客棧o/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檔案比對結果:

本文標題: python difflib模組示例講解

本文位址:

python difflib內建模組之文字對比

difflib模組 difflib為python的標準庫模組,無需安裝。作用時對比文字之間的差異。並且支援輸出可讀性比較強的html文件,與linux下的diff 命令相似。difflib模組提供的類和方法用來進行序列的差異化比較,它能夠比對檔案並生成差異結果文字或者html格式的差異化比較頁面,1...

python difflib檔案對比

什麼是difflib?用來做什麼?difflib為python的標準庫模組,無需安裝。用於對比文字之間的差異。並且支援輸出可讀性比較強的html文件,與linux下的diff 命令相似。在版本控制方面非常有用。符號理解符號 含義 包含在第乙個系列行中,但不包含第二個。包含在第二個系列行中,但不包含第...

python difflib檔案對比

什麼是difflib?用來做什麼?difflib為python的標準庫模組,無需安裝。用於對比文字之間的差異。並且支援輸出可讀性比較強的html文件,與linux下的diff 命令相似。在版本控制方面非常有用。符號含義 包含在第乙個系列行中,但不包含第二個。包含在第二個系列行中,但不包含第乙個。兩個...