为了账号安全,请及时绑定邮箱和手机立即绑定

119-比较文件的差异

标签:
Python

比较两个文件的差异,可以直接使用vim。

# vim -d /etc/passwd /etc/passwd-

python标准库提供了一个difflib,可以进行文件的比较,并且可以生成网页的形式。

import difflibimport webbrowserimport sysimport stringimport osfrom random import choicedef 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)   # 使用浏览器打开文件



作者:凯茜的老爸
链接:https://www.jianshu.com/p/d3d4f6165f64


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消