difflib模組詳解

馬昌偉發表於2021-11-21

 

1、兩個字串對比

difflib模組詳解
import difflib
text1=""" test1 #定義字串
hellow
my name is machanwei!
difflib document v7.4
add str
"""
text1_lines=text1.splitlines() #以行進行分隔,以便進行對比
text2="""text2:   #定義字串2
hellow
my name is machangwei!
difflib document v7.5
"""
text2_lines=text2.splitlines()
d=difflib.Differ()  #建立Differ()物件
diff=d.compare(text1_lines,text2_lines)    #採用compare方法對字串進行比較
print('\n'.join(list(diff)))
對比程式

執行結果:

 

 - + 好像分別代表不同的文字,來區分文字用。這裡-是1的,+是文字2的。?是有區別的地方,有區別的地方會標記箭頭,只有-沒有+,也就是不是成對出現應該是隻有某一方有文字

 

2、對比檔案生成html文件

執行生成html語句

(venv) D:\python_mcw>python python自動化運維書\difflib模組學習.py >>..\diffres.html

 

 

 挺好對比的

difflib模組詳解
import difflib
text1=""" test1 #定義字串
hellow
my name is machanwei!
difflib document v7.4
add str
"""
text1_lines=text1.splitlines() #以行進行分隔,以便進行對比
text2="""text2:   #定義字串2
hellow
my name is machangwei!
difflib document v7.5
"""
text2_lines=text2.splitlines()

# #將下面的
# d=difflib.Differ()  #建立Differ()物件
# diff=d.compare(text1_lines,text2_lines)    #採用compare方法對字串進行比較
# print('\n'.join(list(diff)))

#替換成下面這些:
d=difflib.HtmlDiff()
print(d.make_file(text1_lines,text2_lines))
上面的程式

3、對比檔案差異

difflib模組詳解
[root@hecs-358404 ~]# cat mcw.py 
# __*__ coding:utf-8 _*_
#!/usr/bin/env python
import difflib
import sys

try:
    mcwfile1=sys.argv[1]  #第一個配置檔案路徑引數
    mcwfile2=sys.argv[2] #第二個配置檔案路徑引數
except Exception as e:
    print("Error:"+str(e))
    print("Usage: mcw.py  mcwfile1 mcwfile2")
    sys.exit()

def readfile(filename): #檔案讀取分隔函式
    try:
        fileHandle=open(filename,'rb')
        text=fileHandle.read().splitlines()   #讀取後以行進行分隔
        fileHandle.close()
        return text
    except IOError as error:
        print('Read file Error:'+str(error))
        sys.exit()
if mcwfile1=="" or mcwfile2=="":
    print("Usage: mcw.py  mcwfile1 mcwfile2")
    sys.exit()
text1_lines=readfile(mcwfile1) #呼叫函式,獲取分隔後的字串
text2_lines=readfile(mcwfile2)
d=difflib.HtmlDiff()
print d.make_file(text1_lines,text2_lines)
對比程式
difflib模組詳解
server {

       listen       80;

       server_name  blog.etiantian.org;

       location / {

                root   html/blog;

                index  index.html index.htm;

          }

        location ~* .*\.(php|php5)?$ {

          root html/blog;

              fastcgi_pass  127.0.0.1:9000;

              fastcgi_index index.php;

              include fastcgi.conf;

          }

}
檔案1
difflib模組詳解
#server {

       listen       80;

            server_name  blog.etiantian.org;

       location / {

                root   html/blog;

                index  index.html index.htm;

          }

        machangwei
        location ~* .*\.(php|php5)?$ {

          root html/blog;

              fastcgi_pass  127.0.0.1:9000;

              fastcgi_index index.php;

              include fastcgi.conf;

          }
        fffffff
}
檔案2

 

 對比結果如下:

 

 

 

參考書籍:自動化運維技術與最佳實踐  劉天斯

 

相關文章