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)   # 使用浏览器打开文件

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

最新版Solr6.2.1安装记录

36850
来自专栏大内老A

如何实现IIS 7.0对非HTTP协议的支持

在《再谈IIS与ASP.NET管道》介绍各种版本的IIS的设计时,我们谈到IIS 7.0因引入WAS提供了对非HTTP协议的支持。这个对于WCF的服务寄宿来说意...

273100
来自专栏运维

CentOS 5至CentOS 5.8 YUM 源

本源是http://mirrors.163.com的,也可用http://centos.ustc.edu.cn/的,

1.2K20
来自专栏用户2442861的专栏

每天一个linux命令(61):wget命令

http://www.cnblogs.com/peida/archive/2013/03/18/2965369.html

26220
来自专栏Hongten

hadoop2集群环境搭建

在查询了很多资料以后,发现国内外没有一篇关于hadoop2集群环境搭建的详细步骤的文章。

18020
来自专栏王磊的博客

你必须知道的session与cookie

Session本质 提到Session我们能联想到的就是用户登录功能,而本身我们使用Session的基础是通过url进行访问的,也就是使用http协议进行访问的...

36790
来自专栏技术博客

JavaScript判断页面是否已经加载完毕

  在做针对CheckBox框点击事件的时候,发现点击以后有时候会报错,但是是生成的JavaScript的代码的内部错误,无法判断到底是什么地方有问题。就一直在...

10020
来自专栏云计算教程系列

在CVM上搭建网页服务器(LNMP)

LNMP是一组可用于为动态网页和Web应用程序提供服务的软件。这是一个描述Linux操作系统的首字母缩略词,带有Nginx(发音为“ Engine-X”)Web...

63960
来自专栏PHP在线

MySQL 主从复制的原理和配置

主从复制的原理: 分为同步复制和异步复制,实际复制架构中大部分为异步复制。 复制的基本过程如下: 1).Slave上面的IO进程连接上Master,并请求从指定...

350120
来自专栏西安-晁州

Docker下redis的主从、持久化配置

Docker下redis的主从、持久化配置 redis是k-v型nosql数据库,支持字符串(string)、列表(list)、集合(set)、散列(hash)...

602100

扫码关注云+社区

领取腾讯云代金券