目录[-]
使用python的内置库difflib为核心,实现两个文本进行对比并生成HTML网页,为方便使用,使用内置库tkinter制作简单的界面,效果如下:
#作者:冯桂和
#功能:将输入的两个文本进行对比,查看增删改部分
import tkinter as tk
from tkinter import *
from tkinter import messagebox
import difflib
#创建主窗口
win=tk.Tk()
#设置窗口标题
win.title("文本对比工具")
#设置窗口大小
win.geometry('1170x650+300+200')
#创建两个文本控件
text1=tk.Text(win,width=80,height=40)
text2=tk.Text(win,width=80,height=40)
text1.grid(row=1,column=0,padx=5,pady=5)
text2.grid(row=1,column=1,padx=5,pady=5)
#添加四个按钮函数
t1='' #全局变量存储内容1
t2='' #全局变量存储内容2
def b1():
global t1
text1.delete('1.0', END)
ctrlv=win.clipboard_get()
text1.insert(END,ctrlv)
t1=ctrlv
def b2():
global t2
text2.delete('1.0', END)
ctrlv=win.clipboard_get()
text2.insert(END,ctrlv)
t2=ctrlv
def b3():
global t1,t2
t1=text1.get("1.0", "end")
t2=text2.get("1.0", "end")
len1=len(t1)-1
len2=len(t2)-1
show='内容1字符数:{}\n内容2字符数:{}'.format(len1,len2)
messagebox.showinfo(title='运行提示', message=show)
def b4():
global t1,t2
t1=text1.get("1.0", "end") #获取文本1
t2=text2.get("1.0", "end") #获取文本2
t1=hh(t1) #过长换行
t2=hh(t2) #过长换行
t1=t1.splitlines(keepends=True) #分割保留回车符
t2=t2.splitlines(keepends=True) #分割保留回车符
d=difflib.HtmlDiff() #创建对比对象
result=d.make_file(t1,t2) #生成对比内容
result=result.replace('Added','新增') #替换网页内容
result=result.replace('Changed',' 改变 ') #替换网页内容
result=result.replace('Deleted',' 删除 ') #替换网页内容
f=open('文本对比.html','w',encoding='utf-8') #输出html文件
f.write(result)
f.close()
messagebox.showinfo(title='运行提示', message='程序运行成功,已在同级目录下生成html文件')
#文本超过指定个字符增加\n函数
def hh(t):
length=44
ttt=t
ttt=ttt.splitlines(keepends=True)
for i in range(len(ttt)):
j=0
if len(ttt[i])>=length: #超过length长度的段落进行操作
j=int(len(ttt[i])/length)
if j>1:
for k in range(1,j+1):
ttt[i]=list(ttt[i]) #段落转列表
ttt[i].insert(length*k,'\n') #列表插入换行符
ttt[i]=''.join(ttt[i]) #列表转回字符串段落
a="".join(ttt)
return a
#创建四个按钮
Button1=tk.Button(win,text='粘贴内容1',width=45, height=1,bg='#D8D8D8',command=b1,font=('微软雅黑',15))
Button2=tk.Button(win,text='粘贴内容2',width=45, height=1,bg='#D8D8D8',command=b2,font=('微软雅黑',15))
Button3=tk.Button(win,text='文本统计',width=45, height=1,bg='#D8D8D8',command=b3,font=('微软雅黑',15))
Button4=tk.Button(win,text='文本对比',width=45, height=1,bg='#C6E3FC',command=b4,font=('微软雅黑',15))
Button1.grid(row=2,column=0,padx=5,pady=5)
Button2.grid(row=2,column=1,padx=5,pady=5)
Button3.grid(row=3,column=0,padx=5,pady=5)
Button4.grid(row=3,column=1,padx=5,pady=5)
#显示主窗口
win.mainloop()