119-比較文件的差異

比較兩個文件的差異,可以直接使用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)   # 使用瀏覽器打開文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章