python difflib內建模組之文字對比

2021-09-24 05:41:24 字數 3681 閱讀 3396

difflib模組

difflib為python的標準庫模組,無需安裝。作用時對比文字之間的差異。並且支援輸出可讀性比較強的html文件,與linux下的diff 命令相似。

difflib模組提供的類和方法用來進行序列的差異化比較,它能夠比對檔案並生成差異結果文字或者html格式的差異化比較頁面,

1、對比檔案生成差異結果文字

生成的差異文字中的符號解釋:符號

含義『-』

包含在第乙個系列行中,但不包含第二個。

『+』包含在第二個系列行中,但不包含第乙個。

』 』兩個系列行一致

『?』存在增量差異

『^』存在差異字元

1 先將文字內容按行分割

f1 = splitlines(keepends=true)# 將多行文字按行分隔,返回乙個列表,保留行尾換行符

f2 = splitlines(keepends=false)# 將多行文字按行分隔,返回乙個列表,不保留行尾換行符

2 生成差異結果檔案

import difflib# 匯入模組

diff = difflib.differ()# 生成差異物件

result = diff.compare(f1,f2)# 使用差異物件比較兩個文字列表,生成差異結果物件

生成的差異物件不能直接檢視,需要轉化成列表並連線成文字

示例:passwd1 :

root❌0:0:root:/root:/bin/bash

bin❌1:1:bin:/bin:/sbin/nologin

adm❌3:4:adm:/var/adm:/sbin/nologin

lp❌4:7:lp:/var/spool/lpd:/sbin/nologin

sync❌5:0:sync:/sbin:/bin/sync

passwd2 :

rooter❌0:0:rooter:/rooter:/bin/bash

bin❌1:1:bin:/bin:/sbin/nologin

daemon❌2:2:daemon:/sbin:/sbin/nologin

adm❌3:4:adm:/var/adm:/sbin/nologin

sync❌5:0:sync:/sbin:/bin/sync

f1 = passwd1.splitlines(keepends=true)

f2 = passwd2.splitlines(keepends=true)

diff = difflib.differ()

result = ''.join(list(diff.compare(f1,f2)))

print(result)

#輸出結果:

- root:x:0:0:root:/root:/bin/bash

? -+ rooter:x:0:0:rooter:/rooter:/bin/bash

? ++ ++ ++

bin:x:1:1:bin:/bin:/sbin/nologin

+ daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

2 、對比檔案生成html格式的差異化比較頁面

1 先將文字內容按行分割

2 生成差異結果檔案

diff = difflib.htmldiff()#生成差異物件

result = diff.make_file(f1,f2)# 對比生成差異結果

3 將差異結果寫入到html檔案中

with open('passwd.html','w')as f:

f.write(result)

示例:

import difflib

passwd1 = '''

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

'''passwd2 = '''

rooter:x:0:0:rooter:/rooter:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

'''f1 = passwd1.splitlines(keepends=true)

f2 = passwd2.splitlines(keepends=true)

diff = difflib.htmldiff()

result = diff.make_file(f1,f2)

with open('passwd.html','w')as f:

f.write(result)

使用瀏覽器開啟生成的html檔案,存在不同的地方會進行高亮顯示:

3 、檔案之間的對比

首先將檔案內容讀取出來,然後按照上述方法進行處理即可:

比較 /public/passwd1 和 /public/passwd2 檔案存在的差異。並生成 /public/passwd.html 檔案。

import difflib

with open('/public/passwd1')as passwd1,open('/public/passwd2')as passwd2:

f1 = passwd1.read().splitlines(keepends=true)

f2 = passwd2.read().splitlines(keepends=true)

diff = difflib.htmldiff()

result = diff.make_file(f1,f2)

with open('/public/passwd.html','w')as f:

f.write(result)

python difflib檔案對比

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

python difflib檔案對比

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

python difflib模組示例講解

difflib模組提供的類和方法用來進行序列的差異化比較,它能夠比對檔案並生成差異結果文字或者html格式的差異化比較頁面,如果需要比較目錄的不同,可以使用filecmp模組。class difflib.sequencematcher 此類提供了比較任意可雜湊型別序列對方法。此方法將尋找沒有包含 垃...