python运维开发常用模块(四)文件对比模块difflib
1.difflib介紹
difflib作為 Python的標準庫模塊,無需安裝,作用是對比文本之間的差異,且支持 輸出可讀性比較強的HTML文檔,與Linux下的diff命令相似。我們可以 使用difflib對比代碼、配置文件的差別,在版本控制方面是非常有用。 Python 2.3或更高版本默認自帶difflib模塊,無需額外安裝。
?
示例1:兩個字符串的差異對比
[yhl@myhost part2]$ cat simple1.py #!/usr/bin/python #_*_coding:utf-8_*_ #****************************************************************# # ScriptName: simple1.py # Author: BenjaminYang # Create Date: 2019-05-13 11:08 # Modify Author: BenjaminYang # Modify Date: 2019-05-13 11:08 # Function: #***************************************************************#import difflib text1 = """text1: #定義字符串1 This module provides classes and functions for comparing sequences. including HTML and context and unified diffs. difflib document v7.4 add string"""text1_lines=text1.splitlines() #以行進行分隔 text2="""text2: #定義字符串2 This module provides classes and functions for Comparing sequences. including HTML and context and unified diffs. 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))本示例采用Differ()類對兩個字符串進行比較,另外difflib的 SequenceMatcher()類支持任意類型序列的比較,HtmlDiff()類支持 將比較結果輸出為HTML格式
示例運行結果
符號含義說明
生成美觀的對比HTML格式文檔
采用HtmlDiff()類將新文件命名為simple2.py,運行# python simple2.py>diff.html,再 使用瀏覽器打開diff.html文件,結果如圖示2-2所示,HTML文檔包括了 行號、差異標志、圖例等信息,可讀性增強了許多的make_file()方法就可以生成美觀的HTML 文檔,對示例1中代碼按以下進行修改:
示例2:對比Nginx配置文件差異
當我們維護多個Nginx配置時,時常會對比不同版本配置文件的差 異,使運維人員更加清晰地了解不同版本迭代后的更新項,實現的思路 是讀取兩個需對比的配置文件,再以換行符作為分隔符,調用 difflib.HtmlDiff()生成HTML格式的差異文檔。實現代碼如下:
【/home/test/difflib/simple3.py】
?
#!/usr/bin/python #_*_coding:utf-8_*_ #****************************************************************# # ScriptName: simple3.py # Author: BenjaminYang # Create Date: 2019-05-13 12:32 # Modify Author: BenjaminYang # Modify Date: 2019-05-13 12:32 # Function: #***************************************************************# import difflib import sys try:textfile1=sys.argv[1] #第一個配置文件路徑參數textfile2=sys.argv[2] #第二個配置文件路徑參數 except Exception, e:print "Error: " +str(e)print "Usage: simple3.py filename1 filename2"sys.exit() def readfile(filename): #文件讀取分隔函數try:fileHandle=open(filename,'rb')text=fileHandle.read().splitlines()fileHandle.close()return textexcept IOError as error:print ('Read file Error:' +str(error))sys.exit() if textfile1=="" or textfile2=="":print "Usage: simple3.py filename1 filename2"sys.exit() text1_lines=readfile(textfile1) text2_lines=readfile(textfile2) d=difflib.HtmlDiff() #創建HtmlDiff()對象 print d.make_file(text1_lines,text2_lines)#通過make_file的方法生成HTML文件的對比結果?
[yhl@myhost part2]$ python simple3.py /home/yhl/devpython/part2/nginx.conf.v1 /home/yhl/devpython/part2/nginx.conf.v2 >diff.html?
nginx.conf.v1與nginx.conf.v2配置文件對比結果
?
轉載于:https://www.cnblogs.com/benjamin77/p/10856052.html
總結
以上是生活随笔為你收集整理的python运维开发常用模块(四)文件对比模块difflib的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 团队冲刺十
- 下一篇: websocket python爬虫_p