基于Python自制一个文件解压缩小工具
作者:Sir 发布时间:2021-10-15 14:28:00
标签:Python,文件,解压缩
经常在办公的过程中会遇到各种各样的压缩文件处理,但是呢每个压缩软件支持的格式又是不同的。
没有可以一种可以同时多种格式的并且免费的文件解压缩工具,于是我使用python的PyQt5开发出这个文件解压缩的小工具。
接下来,我们将开发过程中需要的python非标准库以及代码块做一个简单的介绍,有兴趣的小伙伴可以停下脚步一起来看看。
一般在windows的操作系统下文件解压缩的格式就是7z/zip/rar这三种,首先我们需要安装一下PyQt5以及需要文件解压缩处理的模块。
这里我们直接使用的是pip的安装方式进行安装,我的pip默认配置的是全局的清华大学镜像站。
pip install PyQt5
pip install py7zr
pip install rarfile
然后,在开始之前我们将需要的python标准或非标准模块全部导入代码块中准备进入下面的开发环节。
# Importing all the classes from the PyQt5.QtGui module.
from PyQt5.QtGui import *
# Importing all the classes from the PyQt5.QtWidgets module.
from PyQt5.QtWidgets import *
# Importing all the classes from the PyQt5.QtCore module.
from PyQt5.QtCore import *
# `import os` is importing the os module.
import os
# `import sys` is importing the sys module.
import sys
# `import zipfile as zip` is importing the zipfile module as zip.
import zipfile as zip
# `import py7zr` is importing the py7zr module.
import py7zr
# `import rarfile as rar` is importing the rarfile module as rar.
import rarfile as rar
# Importing the traceback module.
import traceback
import images
至此,我们开发需要使用到的python模块就全部导入进来了,这里说明一下我们使用到的英文注释是通过pycharm的AI插件直接生成的。
首先,创建一个名称为CompressUI的python类,将所有的UI页面组件及布局全部放在这个类中进行开发。
以及包括UI页面组件关联的槽函数也放在这个类中,也就是在CompressUI类中我们只处理页面操作相关的部分不做具体逻辑的实现。
class CompressUI(QWidget):
def __init__(self):
super(CompressUI, self).__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('文件解压缩处理工具 公众号:Python 集中营')
self.setWindowIcon(QIcon(':/analysis.ico'))
self.resize(600, 400)
self.compress_file_type = QLabel()
self.compress_file_type.setText('解压缩文件类型:')
self.compress_file_type_combox = QComboBox()
self.compress_file_type_combox.addItems(['7z格式', 'zip格式', 'rar格式'])
self.file_catch_type = QLabel()
self.file_catch_type.setText('文件处理方式:')
self.file_catch_type_combox = QComboBox()
self.file_catch_type_combox.addItems(['压缩', '解压缩'])
self.source_dir_or_file = QLineEdit()
self.source_dir_or_file.setPlaceholderText('来源目录或文件路径...')
self.source_dir_or_file_btn = QPushButton()
self.source_dir_or_file_btn.setText('加载来源目录或文件')
self.source_dir_or_file_btn.clicked.connect(self.source_dir_or_file_btn_clk)
self.target_dir_or_file = QLineEdit()
self.target_dir_or_file.setPlaceholderText('目标目录路径...')
self.target_dir_or_file_btn = QPushButton()
self.target_dir_or_file_btn.setText('选择目标路径')
self.target_dir_or_file_btn.clicked.connect(self.target_dir_or_file_btn_clk)
self.start_btn = QPushButton()
self.start_btn.setText('开始执行文件压缩或解压缩处理')
self.start_btn.clicked.connect(self.start_btn_clk)
self.brower = QTextBrowser()
self.brower.setReadOnly(True)
self.brower.setFont(QFont('宋体', 8))
self.brower.setPlaceholderText('日志处理过程区域...')
self.brower.ensureCursorVisible()
grid = QGridLayout()
grid.addWidget(self.compress_file_type, 0, 0, 1, 2)
grid.addWidget(self.compress_file_type_combox, 0, 2, 1, 1)
grid.addWidget(self.file_catch_type, 1, 0, 1, 2)
grid.addWidget(self.file_catch_type_combox, 1, 2, 1, 1)
grid.addWidget(self.source_dir_or_file, 2, 0, 1, 2)
grid.addWidget(self.source_dir_or_file_btn, 2, 2, 1, 1)
grid.addWidget(self.target_dir_or_file, 3, 0, 1, 2)
grid.addWidget(self.target_dir_or_file_btn, 3, 2, 1, 1)
grid.addWidget(self.start_btn, 4, 0, 1, 3)
grid.addWidget(self.brower, 5, 0, 1, 3)
self.thread_ = WorkThread(self)
self.thread_.message.connect(self.show_message)
self.thread_.finished.connect(self.thread_is_finished)
self.setLayout(grid)
def show_message(self, text):
cursor = self.brower.textCursor()
cursor.movePosition(QTextCursor.End)
self.brower.append(text)
self.brower.setTextCursor(cursor)
self.brower.ensureCursorVisible()
def target_dir_or_file_btn_clk(self):
target_dir_or_file_path = QFileDialog.getExistingDirectory(self, '选择文件夹', os.getcwd())
self.target_dir_or_file.setText(target_dir_or_file_path)
def source_dir_or_file_btn_clk(self):
file_catch_type = self.file_catch_type_combox.currentText()
if file_catch_type == '压缩':
source_dir_or_file_path = QFileDialog.getExistingDirectory(self, '选择文件夹', os.getcwd())
self.source_dir_or_file.setText(source_dir_or_file_path)
else:
source_dir_or_file_path = QFileDialog.getOpenFileName(self, "选取文件", os.getcwd(),
"RAR File (*.rar);;ZIP File (*.zip);;7z File (*.7z)")
self.source_dir_or_file.setText(source_dir_or_file_path[0])
def start_btn_clk(self):
self.start_btn.setEnabled(False)
self.thread_.start()
def thread_is_finished(self, text):
if text is True:
self.start_btn.setEnabled(True)
来源:https://mp.weixin.qq.com/s/WOObNVDiM5OemLNpAIEsQw


猜你喜欢
- 正则中有分组这个功能,在golang中也可以使用命名分组。一次匹配的情况场景还原如下:有一行文本,格式为:姓名 年龄 邮箱地址请将其转换为一
- 一、问题的引入opencv在图像处理方面有着非常强大的功能,当我们需要使用opencv进行一些图像的矫正工作时,我们通常需要找到原图的一些关
- 一、简单介绍pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装和卸载的功能,现在大家用到的所有包不是自带
- php操作xml最近计划写个人的小网站,一系列原因选择了用php来写,最大的问题就是虽然php很流行,但我从来没有接触过php,看了一个多星
- 简单方法实现网页自动适应任何分辨率任何窗口大小(只适用于IE)<!DOCTYPE html PUBLIC "-//W3C//
- 1.批量处理所谓的批处理就是批量处理cmd里面的命令。python要想实现批处理功能需要导入os库,然后利用批处理的命令为os.system
- 有一个表tb_3a_huandan_detail,每天有300W左右的数据。查询太慢了,网上了解了一下,可以做表分区。由于数据较大,所以决定
- 本文实例讲述了Python使用wget实现下载网络文件功能。分享给大家供大家参考,具体如下:wget是一个从网络上自动下载文件的自由工具。它
- 前言我最近都在写一些Python 3.8的新功能介绍的文章,在自己的项目中也在提前体验新的Python版本。为什么我对这个Python 3.
- 一、re是什么?正则表达式是一个特殊的字符序列,能方便的检查一个字符串是否与某种模式匹配。re模块使得python拥有全部的正则表达式功能。
- 前言之前一直写不出来,这周周日花了一下午终于弄懂了, 顺便放博客里,方便以后忘记了再看看。 要实现的是输入一张 图,起点,终点,输出起点和终
- 下载地址:https://www.percona.com/downloads/XtraBackup/安装xtrabackup[root@no
- 函数:len()1:作用:返回字符串、列表、字典、元组等长度2:语法:len(str)3:参数:str:要计算的字符串、列表、字典、元组等4
- 1. 梯度 * 的影响在一个只有一个隐藏节点的网络中,损失函数和权值w偏置b构成error surface,其中有一堵墙,如下所示损失函数每次
- 前序There should be one - and preferably only one - obvious way to do it
- 今天是五一劳动节,可是我们劳动人民的节日哦。很多大网站都设计了特殊的logo来表示向每一位普通的劳动者致敬!下面就让我们看看这些logo吧!
- 最近游戏项目在多个国家上线,每个国家都对应两份儿svn目录(一份是本地策划目录,一份是线上目录)。于是乎维护变得很烦躁。需要先更新本地策划s
- 项目中需要FusionCharts图表显示双Y轴,好像FCF_MSLine.swf不可以这样,只能显示一个Y轴,多条线, 找了一下,用MSC
- 在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样。在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可。但是,
- 使用环境:Win10 x64 Python:3.6.4 SqlServer:2008R2 因为