python查找两文本不同字符及其相对重复率等及其pyqt5界面

1.效果

在这里插入图片描述

2.功能

1.找出两个文本中不同的地方
2.统计两个文本各自的字数(含符号与不含符号)
3.统计两文本之间相对重复率(含符号与不含符号)

3.代码

3.1 制定界面

用QTdesigner制作界面,保存成.ui文件。
在这里插入图片描述
回到Pycharm里用pyuic5转换为python代码:

pyuic5 compare.ui -o compare.py

转化完成的界面代码:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'compare_2.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1114, 830)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.plainTextEdit.setGeometry(QtCore.QRect(290, 10, 781, 301))
        self.plainTextEdit.setObjectName("plainTextEdit")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(810, 610, 211, 34))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(370, 610, 191, 34))
        self.pushButton_3.setObjectName("pushButton_3")
        self.plainTextEdit_4 = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.plainTextEdit_4.setGeometry(QtCore.QRect(290, 320, 781, 281))
        self.plainTextEdit_4.setObjectName("plainTextEdit_4")
        self.webEngineView = QtWebEngineWidgets.QWebEngineView(self.centralwidget)
        self.webEngineView.setGeometry(QtCore.QRect(10, 10, 261, 761))
        self.webEngineView.setUrl(QtCore.QUrl("about:blank"))
        self.webEngineView.setObjectName("webEngineView")
        self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
        self.textBrowser.setGeometry(QtCore.QRect(290, 660, 781, 111))
        self.textBrowser.setObjectName("textBrowser")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1114, 30))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton_2.setText(_translate("MainWindow", "比较"))
        self.pushButton_3.setText(_translate("MainWindow", "清空"))

from PyQt5 import QtWebEngineWidgets

3.2 程序

from sys import exit,argv
import difflib
import compare_ui2
import re

## 比较函数
def compare_file(file1, file2):
    file1_content = file1
    file2_content = file2
    file1_content = file1_content.replace("\n", '').replace("\t", '')
    file2_content = file2_content.replace("\n", '').replace("\t", '')
    d = difflib.HtmlDiff()
    result = d.make_file(file1_content, file2_content)
    return result

## 绑定动作函数
def clicked():
    text1 = ui.plainTextEdit.toPlainText()
    text2 = ui.plainTextEdit_4.toPlainText()
    result=compare_file(text1, text2)
    # 要让html在PyQT界面显示,需要在html前后加上三引号
    f = "'''" + result + "'''"
    ui.webEngineView.setHtml(f)
    calculate()

## 清空函数
def clean():
    ui.plainTextEdit.clear()
    ui.plainTextEdit_4.clear()
    ui.textBrowser.clear()

##计数函数
def count_all():
    text1 = ui.plainTextEdit.toPlainText()
    text2 = ui.plainTextEdit_4.toPlainText()
    com = difflib.Differ()
    com = com.compare(text1, text2)
    str = "".join(com)
    text1_total=len(text1)
    text2_total=len(text2)
    text1_only = str.count("-")
    text2_only=str.count("+")
    return text1_only,text1_total,text2_only,text2_total

##计数函数(不含符号)
def count_ca():
    text1 = ui.plainTextEdit.toPlainText()
    text2 = ui.plainTextEdit_4.toPlainText()
    #去掉文字以外的符号
    text1 = re.sub("[\s+\.\!\/_,$%^*(+\"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+", "", text1)
    text2 = re.sub("[\s+\.\!\/_,$%^*(+\"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+", "", text2)
    com = difflib.Differ()
    com = com.compare(text1, text2)
    str = "".join(com)
    text1_total=len(text1)
    text2_total=len(text2)
    text1_only=str.count("-")
    text2_only=str.count("+")
    return text1_only, text1_total, text2_only, text2_total

## 统计两文本的详细信息
def calculate():
    text1_only, text1_total, text2_only, text2_total=count_all()
    text1_caonly, text1_catotal, text2_caonly, text2_catotal=count_ca()
    try:
        text1_repetitive_rate=(text1_total-text1_only)/text1_total*100
        text2_repetitive_rate=(text2_total-text2_only)/text2_total*100
        text2ca_repetitive_rate=(text2_catotal-text2_caonly)/text2_catotal*100
        text1ca_repetitive_rate=(text1_catotal-text1_caonly)/text1_catotal*100
        ui.textBrowser.append("文本1总字数:" + str(text1_total))
        ui.textBrowser.append("文本2总字数:" + str(text2_total))
        ui.textBrowser.append("去掉所有符号后,文本1总字数:" + str(text1_catotal))
        ui.textBrowser.append("去掉所有符号后,文本2总字数:" + str(text2_catotal))
        ui.textBrowser.append("文本1独有字符数:" + str(text1_only))
        ui.textBrowser.append("文本2独有字符数:" + str(text2_only))
        ui.textBrowser.append("文本1相对于文本2的重复率为:" + str(text1_repetitive_rate) + "%")
        ui.textBrowser.append("文本2相对于文本1的重复率为:" + str(text2_repetitive_rate) + "%")
        ui.textBrowser.append("去掉所有符号后,文本2相对于文本1的重复率为:" + str(text2ca_repetitive_rate) + "%")
        ui.textBrowser.append("去掉所有符号后,文本1相对于文本2的重复率为:" + str(text1ca_repetitive_rate) + "%")
    except Exception as e:
        ui.textBrowser.append("文本1或文本2为空;或其中一个文本仅有符号,没有字:" + str(e))

## 主程序
if __name__ == '__main__':
    app = compare_ui2.QApplication(argv)
    widgets = compare_ui2.QMainWindow()
    ui = compare_ui2.Ui_MainWindow()
    ui.setupUi(widgets)
    try:
        if  ui.pushButton_2.isDown:
            ui.pushButton_2.clicked.connect(clicked)
        if ui.pushButton_3.isDown:
            ui.pushButton_3.clicked.connect(clean)

    except Exception as e:
         ui.textBrowser.append("错误:" + str(e))

    widgets.show()
    exit(app.exec_())

4.程序打包

在Pycharm里使用pyinstaller打包:

pyinstaller -w compare.py

-w: 隐藏后台黑框
-f: 打包成一个文件,没有这个命令则打包成文件夹

我打包好的文件,可以下载直接使用:

链接: https://pan.baidu.com/s/17URrtWpY35WMZ0RAwxKHJQ
提取码: bryw
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值