基于Python自制一个文件解压缩小工具

作者:Sir 时间:2021-10-15 14:28:00 

经常在办公的过程中会遇到各种各样的压缩文件处理,但是呢每个压缩软件支持的格式又是不同的。

没有可以一种可以同时多种格式的并且免费的文件解压缩工具,于是我使用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

标签:Python,文件,解压缩
0
投稿

猜你喜欢

  • Oracle系统表外键的更名

    2010-07-26 13:07:00
  • Python的for和break循环结构中使用else语句的技巧

    2022-07-02 16:59:26
  • linux下通过go语言获得系统进程cpu使用情况的方法

    2024-05-08 10:13:01
  • python遍历序列enumerate函数浅析

    2022-10-31 01:34:21
  • Python真题案例之二分法查找详解

    2023-09-23 01:39:07
  • python基于Opencv实现人脸口罩检测

    2021-11-18 02:45:16
  • 关于TensorFlow新旧版本函数接口变化详解

    2022-12-29 19:00:21
  • Python+Tableau广东省人口普查可视化的实现

    2022-02-12 21:53:59
  • 一文教你如何使用Python绘制瀑布图

    2023-07-10 18:29:28
  • mysql 开发技巧之JOIN 更新和数据查重/去重

    2024-01-17 06:30:54
  • 利用pip安装python第三方库的4种方法

    2023-11-16 08:16:51
  • 浅析is_writable的php实现

    2023-09-09 01:41:05
  • 5款实用的python 工具推荐

    2021-08-09 20:13:28
  • Python seek()和tell()函数的具体使用

    2023-12-07 20:59:39
  • python 删除字符串中连续多个空格并保留一个的方法

    2021-08-16 14:07:25
  • 用virtualenv建立多个Python独立虚拟开发环境

    2023-10-28 06:24:07
  • Python实现OCR识别之pytesseract案例详解

    2021-03-02 02:14:35
  • python3.7.2 tkinter entry框限定输入数字的操作

    2021-02-22 14:40:36
  • 一篇文章彻底搞懂Python切片操作

    2021-10-11 18:23:07
  • python实现删除文件与目录的方法

    2023-11-12 23:34:46
  • asp之家 网络编程 m.aspxhome.com