119-比较文件的差异

作者: 凯茜的老爸 | 来源:发表于2018-09-26 12:29 被阅读90次

    比较两个文件的差异,可以直接使用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)   # 使用浏览器打开文件
    

    相关文章

      网友评论

        本文标题:119-比较文件的差异

        本文链接:https://www.haomeiwen.com/subject/nkudoftx.html