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 此類提供了比較任意可雜湊型別序列對方法。此方法將尋找沒有包含 垃...