比较两个文件的差异,可以直接使用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