比較兩個文件的差異,可以直接使用vim。
# vim -d /etc/passwd /etc/passwd-
python標準庫提供了一個difflib,可以進行文件的比較,並且可以生成網頁的形式。
import difflib import webbrowser import sys import string import os from random import choice def rand_chs(n=8): # 默認生成8個隨機字符 all_chs = string.ascii_letters + string.digits result = [choice(all_chs) for i in range(n)] return ''.join(result) # 函數接收兩個相似的文件名,返回HTML形式的字符串 def make_diff(lfile, rfile): d = difflib.HtmlDiff() # 將兩個文件分別讀到列表中 with open(lfile) as fobj: ldata = fobj.readlines() with open(rfile) as fobj: rdata = fobj.readlines() return d.make_file(ldata, rdata) # 返回HTML格式內容 if __name__ == '__main__': try: lfile = sys.argv[1] rfile = sys.argv[2] except IndexError: print('Usage: %s file1 file2' % sys.argv[0]) sys.exit(1) if not os.path.isfile(lfile): print('No such file:', lfile) sys.exit(2) if not os.path.isfile(rfile): print('No such file:', rfile) sys.exit(3) data =make_diff(lfile, rfile) # 以下只是爲說明內容增加中文顯示,非必須項 data = data.replace(';Added', ';Added(增加)') data = data.replace('>Changed', '>Changed(改變)') data = data.replace('>Deleted', '>Deleted(被刪除)') data = data.replace('(f)irst change', '(f)irst change【第一處變更】') data = data.replace('(n)ext change', '(n)ext change【下一處變更】') data = data.replace('(t)op', '(t)op【回到頂部】') html_file = '/tmp/%s.html' % rand_chs() # 用隨機字符生成文件名 with open(html_file, 'w') as fobj: fobj.write(data) webbrowser.open_new_tab('file:///%s' % html_file) # 使用瀏覽器打開文件