首页 > 编程语言 >python学习-实现对比文件输出html

python学习-实现对比文件输出html

时间:2023-04-01 12:05:19浏览次数:40  
标签:__ 输出 python text self window html place tk

在网络配置过程中,经常要对比两个配置文的差异,常用的一些文档编辑器带有文本对比的功能,如notepadd++,等。但是这些大部分都要收费或者安装其他插件,不是很友好,linux上自带diff可以对比,但是一般网工都linux不太熟悉。而且操蛋的是在客户都这里,给你的终端装了沙盒,禁止安装 其他的文本的编辑器,也不能联网,还好可以装python,所以就像想写一个python的图形化对比工具

需求:

  • 基于python3编写,不依赖其他第三方模块
  • 基于图形化,操作简单

采用去如下办法解决

  • 采用python3自带的difflib模块,对比文件结果输出为html
  • 采用python3自带的tk图形框架

以下是相关代码

import difflib
import tkinter as tk
import tkinter.filedialog  #文件输入框
import tkinter.messagebox #提示框

class WINDOW():

    def __init__(self):
        '''
        构造tk窗口
        '''
        self.window=tk.Tk()
        self.window.title('文件对比') #设置标题
        self.window.geometry("650x200") #设置大小
        self.label=tk.Label(self.window,text="请选择需要对比的文件:",fg='blue',font=("Arial",12)).place(x=30,y=30) #主窗口添加标签
        self.l1=tk.Label(self.window,text="源文件:",font=("Arial",12)).place(x=30,y=80)
        self.l2=tk.Label(self.window,text="目标文件:",font=("Arial",12)).place(x=30,y=110)
        #主窗口添加文本框
        self.txt_path1=tk.StringVar()
        self.text1=tk.Entry(self.window,textvariable=self.txt_path1,show=None,width=60)
        self.txt_path2 = tk.StringVar()
        self.text2 = tk.Entry(self.window, textvariable=self.txt_path2, show=None, width=60)
        self.text1.place(x=120,y=80)
        self.text2.place(x=129,y=110)
        #主窗口添加命令按钮
        self.button1=tk.Button(self.window,width=8,height=1,text="选择文件",bg="skyblue",command=self.button1).place(x=550,y=80)
        self.button2=tk.Button(self.window,width=8,height=1,text="选择文件",bg="skyblue",command=self.button2).place(x=550,y=110)
        self.button3= tk.Button(self.window, width=8, height=1, text="比较文件", fg="red",bg="orange", command=self.Diff).place(
            x=550, y=150)
        self.window.mainloop()


    def button1(self):
			  #按钮函数,使用tk.filedialog.askopenfilename()打开文件
        self.file1=tk.filedialog.askopenfilename()
        self.txt_path1.set(self.file1)


    def button2(self):

        self.file2 = tk.filedialog.askopenfilename()
        self.txt_path2.set(self.file2)

    def Diff(self):
        '''
        比对文件
        @return:
        '''
        with open(self.file1) as f1,open(self.file2) as f2:
            text1=f1.readlines()
       # with open(file2) as f2:
            text2=f2.readlines()
        try:
            diff=difflib.HtmlDiff()
            with open('result.html','w') as f:
                f.write(diff.make_file(text1,text2))
            tkinter.messagebox.showinfo("info","比对完毕!")
        except Exception as e:
            tkinter.messagebox.showerror("error","e")
            raise e


if __name__ == '__main__':
    Window=WINDOW()

运行效果

python学习-实现对比文件输出html_Diff

python学习-实现对比文件输出html_python_02


标签:__,输出,python,text,self,window,html,place,tk
From: https://blog.51cto.com/u_11555417/6163447

相关文章

  • Python之路,Day12 - 那就做个堡垒机吧
    本节内容项目实战:运维堡垒机开发 1.前景介绍到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒机所具备的功能属性中的其中一项而已,下面我就给大家介绍一下......
  • 【python基础】eval的使用
    前言开发的时候,遇到一个标注的json文件中多边形的框的表示,一时忘记不知道如何解析,此处主要使用eval函数,故记录之。json文件多边形框的描述"result":[{"tagtype":"circle_green","obstructed":false,"labelId"......
  • [oeasy]python0122_日韩字符_日文假名_JIS_Shift_韩国谚文
    日文假名和韩国谚文回忆上次内容上次回顾了非ascii的拉丁字符编码的进化过程0-127是ascii的领域 世界各地编码分布拉丁字符扩展ascii共16种由iso组织制定从iso-8859-1到iso-8859-16 无法同时显示俄文和法文  此......
  • [1]Python基础语法-【12】模块导入
    模块是Python中的一种重要组件,它可以让你将代码分割成更小、更易于维护和重复使用的部分。在Python中,你可以使用import语句将模块导入到你的代码中。本篇文章将详细介绍Python中的模块导入。模块的定义在Python中,模块是一组相关的函数、类和变量的集合,它们通常被存储在单......
  • [oeasy]python0122_日韩字符_日文假名_JIS_Shift_韩国谚文
    日文假名和韩国谚文回忆上次内容上次回顾了非ascii的拉丁字符编码的进化过程0-127是ascii的领域世界各地编码分布拉丁字符扩展ascii共16种由iso组织制定从iso-8859-1到iso-8859-16无法同时显示俄文和法文此时中日韩的文字也需要进入计算机象形文字的字符集超级巨大日本......
  • Python: issues
     'import*'onlyallowedatmodulelevelWhenPythoncompilescodeitneedsadeterminednumberoflocalvariables,Thenumberofvariablesthatimport*canreturncanchangeaftercodeiscompiled.foo=55deffunc():fromsome_modulei......
  • python利用pyinstaller打包生成exe
    1.安装pyinstallerpipinstallpyinstaller是最简单的安装方式2.要打包的文件目录下,并执行命令允许一个文件pyinstaller.exe-F.\要打包的py文件pyinstaller.exe-F.\wei_dian_vbuyCreateOrder.py......
  • 100道python基础题——(24)
    题:Python有许多内置函数,如果您不知道如何使用它,您可以在线阅读文档或查找一些书籍。但是Python为每个内置函数都有一个内置的文档函数。请编写一个程序来打印一些Python内置函数文档,例如abs(),int(),raw_input()并为您自己的功能添加文档提示:内置文档方法是__doc__ print(a......
  • 渡一教育_Java每日一练:建立Statement的作用是什么、前端Console.log( Boolean(‘‘))
    系列文章目录文章目录系列文章目录题目1java部分建立Statement的作用是什么(答案在最后公布)题目1-答案==解析====答案==题目2前端js部分==答案==题目3前端js部分如下代码输出的是什么答案和解析如下==解析==题目4如果希望1监听TCP端口为9000,服务端应该怎样创建socket题目答......
  • 基于国产车规级处理器T507-H开发平台,如何用50行Python代码实现图传和人脸识别?
    我们在米尔国产T507-H车规级处理器的开发板上尝试无线图传功能,并且叠加人脸识别检测视频中是否存在人脸。这次使用的是USB摄像头,可以直接接在开发板的接口上。1.连接摄像头连接好摄像头后使用指令dmesg,看到能读取到摄像头。显示为HIK720pCamera接下来使用v4l来检测相机的详细参......