基于PyQt5制作Excel文件数据去重小工具

需求说明:将单个或者多个Excel文件数据进行去重操作,去重的列可以通过自定义制定。

开始源码说明之前,先说明一下工具的使用过程。

1、准备需要去重的数据文件。

2、使用工具执行去重操作。

3、处理完成后的结果文件。

PyQt5 界面UI相关的模块引用

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

核心组件

from PyQt5.QtCore import *

主题样式模块引用

from QCandyUi import CandyWindow

在这个应用中使用一个默认的杨氏模块QCandyUi,可以改变整个应用的主题颜色设计不用一个控件一个控件的去修改样式。有一个不好的地方就是应用本身设置的标题和应用图标不能生效,必须利用这个样式控件CandyWindow来修改,就像下面这样需要将我们自己写的UI空间放到里面。

# w = CandyWindow.createWindow(EDataDel(), theme='blueGreen', title='Excel批数据去重器  公众号:[Python 集中营]',
#                                  ico_path='数据去重.ico')
#     w.show()

应用操作相关模块

import sys
import os

Excel数据处理模块

import pandas as pd
import openpyxl as pxl

UI界面布局设计、信号量槽函数绑定实现

class EDataDel(QWidget):
    def __init__(self):
        super(EDataDel, self).__init__()
        self.init_ui()

    def init_ui(self):
        self.brower = QTextBrowser()
        self.brower.setReadOnly(True)
        self.brower.setFont(QFont('微软雅黑', 8))
        self.brower.setPlaceholderText('处理进程展示区域...')
        self.brower.ensureCursorVisible()

        form = QFormLayout()
        self.file_paths = QLineEdit()
        self.file_paths.setReadOnly(True)

        self.file_paths_btn = QPushButton()
        self.file_paths_btn.setText('加载批文件')
        self.file_paths_btn.clicked.connect(self.file_paths_btn_click)

        self.colums_label = QLabel()
        self.colums_label.setText('自定义去重复列')

        self.colums_text = QLineEdit()
        self.colums_text.setPlaceholderText('列名1,列名2,列名3,...')

        form.addRow(self.file_paths, self.file_paths_btn)
        form.addRow(self.colums_label, self.colums_text)

        self.work = DataWork(self)
        self.work.trigger.connect(self.update_log)
        self.work.finished.connect(self.finished)

        vbox = QVBoxLayout()
        self.start_btn = QPushButton()
        self.start_btn.setText('开始执行')
        self.start_btn.clicked.connect(self.start_btn_click)

        vbox.addLayout(form)
        vbox.addWidget(self.start_btn)

        hbox = QHBoxLayout()
        hbox.addWidget(self.brower)
        hbox.addLayout(vbox)

        self.setLayout(hbox)

    def file_paths_btn_click(self):
        paths = QFileDialog.getOpenFileNames(self, '选择文件', os.getcwd(), 'Excel Files(*.xlsx)')
        files = paths[0]
        path_strs = ''
        for file in files:
            path_strs = path_strs + file + ';'
        self.file_paths.setText(path_strs)
        if self.file_paths.text().strip() != '':
            self.update_log('已经完成批文件路径加载!')
        else:
            self.update_log('没有选择任何文件!')

    def save_dir_btn_click(self):
        directory = QFileDialog.getExistingDirectory(self, '选择文件夹', os.getcwd())
        self.save_dir.setText(directory)

    def update_log(self, text):
        cursor = self.brower.textCursor()
        cursor.movePosition(QTextCursor.End)
        self.brower.append(text)
        self.brower.setTextCursor(cursor)
        self.brower.ensureCursorVisible()

    def start_btn_click(self):
        self.start_btn.setEnabled(False)
        self.work.start()

    def finished(self, finished):
        if finished is True:
            self.start_btn.setEnabled(True)

创建子线程,处理业务逻辑(清理Excel重复文件)

class DataWork(QThread):
    trigger = pyqtSignal(str)
    finished = pyqtSignal(bool)

    def __init__(self, parent=None):
        super(DataWork, self).__init__(parent)
        self.parent = parent
        self.working = True

    def __del__(self):
        self.working = False
        self.wait()

    def run(self):
        self.trigger.emit('启动批量处理子线程...')
        file_paths = self.parent.file_paths.text().strip()
        colums_text = self.parent.colums_text.text().strip()
        colums = []
        if ',' in colums_text:
            colums = colums_text.split(',')
        else:
            colums.append(colums_text)
        self.trigger.emit('获取配置项完成!')
        for file in file_paths.split(';'):
            if file.strip() != '':
                web_sheet = pxl.load_workbook(file)
                sheets = web_sheet.sheetnames
                print(file)
                new_file = file.split('.')[0] + '_已去重.' + file.split('.')[1]
                print(new_file)
                writer = pd.ExcelWriter(new_file)
                for sheet in sheets:
                    sheet_name = sheet.title()
                    print(sheet_name)
                    self.trigger.emit('准备处理工作表名称:' + str(sheet.title()))
                    data_frame = pd.read_excel(file, sheet_name=sheet_name)
                    print(data_frame)
                    repe = data_frame.duplicated(subset=colums)
                    repe = repe[repe]
                    print(data_frame.iloc[repe.index])
                    res = data_frame.drop_duplicates(subset=colums)
                    print(res)

                    self.trigger.emit(str(sheet.title()) + ':已清除')
                    res.to_excel(writer, sheet_name, index=False)
                writer.save()
            else:
                self.trigger.emit('当前文件路径为空,继续...')
        self.trigger.emit('数据处理完成...')
        self.finished.emit(True)

使用主函数启动整个应用

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = CandyWindow.createWindow(EDataDel(), theme='blueGreen', title='Excel批数据去重器  公众号:[Python 集中营]',
                                 ico_path='数据去重.ico')
    w.show()
    sys.exit(app.exec_())

以上就是基于PyQt5制作Excel文件数据去重小工具的详细内容,更多关于PyQt5数据去重的资料请关注我们其它相关文章!

(0)

相关推荐

  • python实现查找excel里某一列重复数据并且剔除后打印的方法

    本文实例讲述了python实现查找excel里某一列重复数据并且剔除后打印的方法.分享给大家供大家参考.具体分析如下: 在python里面excel的简单读写操作我这里推荐使用xlrd(特别是读操作) import xlrd def open_excel(fileName="simple.xls"): try: fileHandler = xlrd.open_workbook(fileName) return fileHandler except Exception, e: print

  • python常用数据重复项处理方法

    在数据的处理过程中,一般都需要进行数据清洗工作,如数据集是否存在重复,是否存在缺失,数据是否具有完整性和一致性,数据中是否存在异常值等.发现诸如此类的问题都需要针对性地处理,下面我们一起学习常用的数据清洗方法. 重复观测处理 重复观测:指观测行存在重复的现象,重复观测的存在会影响数据分析和挖掘结果的准确性,所以在数据分析和建模之前需要进行观测的重复性检验,如果存在重复观测, 还需要进行重复项的删除 在数据的收集过程中,可能会存在重复观测的出现,例如通过网络爬虫,就比较容易产生重复数据.如下表,是

  • python 删除excel表格重复行,数据预处理操作

    使用python删除excel表格重复行. # 导入pandas包并重命名为pd import pandas as pd # 读取Excel中Sheet1中的数据 data = pd.DataFrame(pd.read_excel('test.xls', 'Sheet1')) # 查看读取数据内容 print(data) # 查看是否有重复行 re_row = data.duplicated() print(re_row) # 查看去除重复行的数据 no_re_row = data.drop_d

  • python中查找excel某一列的重复数据 剔除之后打印

    1.在python中excel的简单读写操作,推荐使用xlrd(特别是读操作) 2.到http://pypi.python.org/pypi/xlrd 去下载 xlrd库: 3.工程代码如下: 复制代码 代码如下: import xlrd def open_excel(fileName="simple.xls"):          try:              fileHandler = xlrd.open_workbook(fileName)              ret

  • 基于PyQt5制作Excel文件数据去重小工具

    需求说明:将单个或者多个Excel文件数据进行去重操作,去重的列可以通过自定义制定. 开始源码说明之前,先说明一下工具的使用过程. 1.准备需要去重的数据文件. 2.使用工具执行去重操作. 3.处理完成后的结果文件. PyQt5 界面UI相关的模块引用 from PyQt5.QtWidgets import * from PyQt5.QtGui import * 核心组件 from PyQt5.QtCore import * 主题样式模块引用 from QCandyUi import Candy

  • 基于PyQt5制作Excel数据分组汇总器

    在写数据汇总分组工具之前梳理一下需求,要求一:能够将excel的数据展示到列表中.要求二:能够支持按列汇总数据,并且多列分组汇总.要求三:能够预览分组汇总以后的数据,最后将分好组汇总的数据保存到新的excel数据文件中. 主要使用到第三方python模块有下面这些,和前面几个 PyQt5 应用不同的是这次增加了一个样式模块 qdarkstyle ,通过最后将这个模块直接加入到 QApplication 中就可以显示成黑色酷酷的应用了.这个样式我个人是比较喜欢的... '''应用操作库''' im

  • 基于Python制作B站视频下载小工具

    目录 1. 原理简介 2. 网页分析 3. 视频爬取 4. 存入本地 5. GUI工具制作 1. 原理简介 原理很简单,就是获取视频资源的源地址,然后爬取视频的二进制内容,再写入到本地即可. 2. 网页分析 打开该网页,然后F12进入开发者模式,接着点开网络—>全部,因为视频资源一般比较大,我这里根据大小进行了从大到小的排序,找到了第一条这些可能和视频源地址有关. 然后,我们复制找到的这条里的url部分不变的部分,回到元素中ctrl+F搜索,找到了可能和视频源地址有关的节点. 果然,我们复制这部

  • 基于C# 写一个 Redis 数据同步小工具

    概念 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文

  • 基于Python制作一个文件去重小工具

    目录 前言 实现步骤 补充 前言 常常在下载网络素材时有很多的重复文件乱七八糟的,于是想实现一个去重的操作. 主要实现思路就是遍历出某个文件夹包括其子文件夹下面的所有文件,最后,将所有文件通过MD5函数的对比筛选出来,最后将重复的文件移除. 实现步骤 用到的第三方库都比较的常见,其中只有hashlib是用来对比文件的不是很常见.其他的都是一些比较常见的第三方库用来做辅助操作. import os # 应用文件操作 import hashlib # 文件对比操作 import logging #

  • 基于PyQt5制作数据处理小工具

    需求分析: 现在有一大堆的Excel数据文件,需要根据每个Excel数据文件里面的Sheet批量将数据文件合并成为一个汇总后的Excel数据文件.或者是将一个汇总后的Excel数据文件按照Sheet拆分成很多个Excel数据文件.根据上面的需求,我们先来进行UI界面的布局设计. 导入UI界面设计相关的PyQt5模块 from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * 应用操作相关的模

  • 基于PyQt5制作一个数据图表生成器

    我的需求:手动配置X轴.Y轴.图表标题等参数自动通过Pyecharts模块生成可视化的html数据图表,并将浏览器图表展示到UI界面上. 制作出图表后的效果展示如下: 另外,生成后的图表结果会使用 html 的形式保存下来. 导入 UI 界面相关的 PyQt5 第三方模块库. from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * 若是使用PyQt5的版本是5.10.1以上,则需要单独安

  • 基于PyQt5制作一个猜数字小游戏

    开始之前,直接来看一下实现后的效果.想自己实现或者需要源码的童鞋直接进场... 将PyQt5的相关模块直接导入即可. from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * 为了照顾一下新关注的童鞋,这里介绍一下PyQt5的安装,还是采用pip的安装方式. pip install PyQt5 将准备好的样式导入到代码块中. # 主题样式模块引用 from QCandyUi import

  • 基于PyQt5制作一个PDF文件合并器

    操作说明:选择多个PDF文件,执行完合并后会生成一个新的PDF文件,这个新的PDF文件包含所有源PDF文件的页面. 将相关的三方模块导入到代码块中... from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * import sys import os import PyPDF2 # PDF操作库 QThread是PyQt5的子线程应用,之前已经使用过比较多的次数了.一般使用时通过创建一个

  • 使用Python制作一个数据预处理小工具(多种操作一键完成)

    在我们平常使用Python进行数据处理与分析时,在import完一大堆库之后,就是对数据进行预览,查看数据是否出现了缺失值.重复值等异常情况,并进行处理. 本文将结合GUI工具PySimpleGUI,来讲解如何制作一款属于自己的数据预处理小工具,让这个过程也能够自动化!最终效果如下 本文将分为三部分讲解: 制作GUI界面 数据处理讲解 打包与测试 主要涉及将涉及以下模块: PySimpleGUI pandas matplotlib 一.GUI界面制作 思路 老规矩,先讲思路再上代码,首先还是说一

随机推荐