在linux系统中,如果要对比两个文件的差异,可以直接使用vim
vim -d /tmp/hsy6666.txt /tmp/hsy7777.txt
源代码
#而在Python中,我们可以导入标准库提供的difflib模块实现对比文件差异这一功能
#导入比较文件差异模块
import difflib
#导入模块支持使用浏览器打开
import webbrowser
import sys
import string
import os
from randomimport choice
#默认生成8个随机字符
def rand_chs(n=8):
#所有大小写字母和数字
all_chs=string.ascii_letters+string.digits
result=[]
for iin range(n):
ch=choice(all_chs)
result.append(ch)
return ''.join(result)
#定义函数接收两个相似的文件名,返回HTML形式的字符串
def make_diff(file1,file2):
d=difflib.HtmlDiff()
#将两个文件名分别读到列表中
with open(file1)as fobj:
data1=fobj.readlines()
with open(file2)as fobj:
data2=fobj.readlines()
#返回HTML格式内容,使用浏览器打开对应的*.html页面
return d.make_file(data1,data2)
if __name__ =='__main__':
try:
file1=sys.argv[1]
file2=sys.argv[2]
except IndexError:
print('Usage:%s file1 file2'%sys.argv[0])
sys.exit(1)
#判断用户输入的路径是否为文件,不是则报错
if not os.path.isfile(file1):
print('NO Such File:',file1)
sys.exit(2)
if not os.path.isfile(file2):
print('No Such File:',file2)
sys.exit(3)
data=make_diff(file1,file2)
# 以下不是必须项,只是为浏览器打开的说明内容增加中文的显示
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)
代码运行结果
python3 比较文件差异.py /tmp/hsy66666.txt /tmp/hsy7777.txt
可以看到对应的被改变的字符会被标记为黄色底色,并且下方有中文说明.
该代码在运维日常中可以被广泛用于查找数据库数据是否一致等范围!