Python中使用 zipfile创建文件压缩工具

 更新时间:2023年09月02日 09:42:46   作者:winfredzhang  
这篇文章主要介绍了Python中使用zipfile创建文件压缩工具,通过使用 wxPython 模块,我们创建了一个简单而实用的文件压缩工具,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的ca参考借鉴价值,需要的朋友可以参考下

在本篇博客中,我们将使用 wxPython 模块创建一个简单的文件压缩工具。该工具具有图形用户界面(GUI),可以选择源文件夹中的文件,将其压缩为 ZIP 文件,并将压缩文件保存到目标文件夹中。C:\pythoncode\new\zipmultifile.py

在这里插入图片描述

准备工作

在开始之前,请确保已经安装了 wxPython 模块。你可以使用以下命令来安装:

pip install wxPython

创建 GUI 界面

首先,我们导入所需的模块,并创建一个 MyFrame 类来表示我们的应用程序窗口。

import wx
import wx.lib.agw.multidirdialog as MDD
import os
import datetime
import zipfile
class MyFrame(wx.Frame):
    # ...

MyFrame 类的构造函数中,我们创建了窗口上的各个控件,包括选择源文件夹的按钮、显示文件列表的 Listbox、选择目标文件夹的按钮以及 Zip 按钮。我们还定义了两个实例变量 source_folder target_folder 分别用于存储选择的源文件夹和目标文件夹的路径。

实现事件处理函数

我们为选择源文件夹按钮绑定了 on_select_source_folder 方法,该方法会打开文件夹选择对话框,并在选择完成后加载文件列表到 Listbox 中。

def on_select_source_folder(self, event):
    dlg = MDD.MultiDirDialog(self, title="选择源文件夹")
    if dlg.ShowModal() == wx.ID_OK:
        self.source_folder = dlg.GetPaths()[0]
        self.load_files()
    dlg.Destroy()

类似地,我们为选择目标文件夹按钮绑定了 on_select_target_folder 方法,该方法会打开文件夹选择对话框,并在选择完成后存储目标文件夹的路径。

def on_select_target_folder(self, event):
    dlg = MDD.MultiDirDialog(self, title="选择目标文件夹")
    if dlg.ShowModal() == wx.ID_OK:
        self.target_folder = dlg.GetPaths()[0]
    dlg.Destroy()

最后,我们为 Zip 按钮绑定了 on_zip 方法,该方法会检查是否选择了要压缩的文件,如果是,则创建一个 ZIP 文件,将选择的文件添加到压缩文件中,并保存到目标文件夹中。

def on_zip(self, event):
    selected_files = [self.listbox.GetString(i) for i in self.listbox.GetSelections()]
    if len(selected_files) == 0:
        wx.MessageBox("请先选择要压缩的文件!", "错误", wx.OK | wx.ICON_ERROR)
        return
    now = datetime.datetime.now()
    zip_filename = os.path.join(self.target_folder, now.strftime("%Y%m%d") + ".zip")
    with zipfile.ZipFile(zip_filename, 'w') as zipf:
        for file in selected_files:
            file_path = os.path.join(self.source_folder, file)
            zipf.write(file_path, file)
    wx.MessageBox("文件已成功压缩为 ZIP 文件!", "成功", wx.OK | wx.ICON_INFORMATION)

启动应用程序

最后,我们创建一个 wxPython 应用程序实例,并显示窗口。

app = wx.App()
frame = MyFrame(None, title="ZIP 文件压缩")
frame.Show()
app.MainLoop()

全部代码

import wx
import wx.lib.agw.multidirdialog as MDD
import os
import datetime
import zipfile
class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super(MyFrame, self).__init__(parent, title=title, size=(600, 400))
        self.panel = wx.Panel(self)
        self.source_folder_btn = wx.Button(self.panel, label="选择源文件夹", pos=(10, 10))
        self.source_folder_btn.Bind(wx.EVT_BUTTON, self.on_select_source_folder)
        self.listbox = wx.ListBox(self.panel, pos=(10, 50), size=(200, 300), style=wx.LB_MULTIPLE)
        self.target_folder_btn = wx.Button(self.panel, label="选择目标文件夹", pos=(250, 10))
        self.target_folder_btn.Bind(wx.EVT_BUTTON, self.on_select_target_folder)
        self.zip_btn = wx.Button(self.panel, label="Zip", pos=(500, 10))
        self.zip_btn.Bind(wx.EVT_BUTTON, self.on_zip)
        self.source_folder = ""
        self.target_folder = ""
    def on_select_source_folder(self, event):
        dlg = MDD.MultiDirDialog(self, title="选择源文件夹")
        if dlg.ShowModal() == wx.ID_OK:
            self.source_folder = dlg.GetPaths()[0]
            self.load_files()
        dlg.Destroy()
    def load_files(self):
        self.listbox.Clear()
        files = os.listdir(self.source_folder)
        for file in files:
            self.listbox.Append(file)
    def on_select_target_folder(self, event):
        dlg = MDD.MultiDirDialog(self, title="选择目标文件夹")
        if dlg.ShowModal() == wx.ID_OK:
            self.target_folder = dlg.GetPaths()[0]
        dlg.Destroy()
    def on_zip(self, event):
        selected_files = [self.listbox.GetString(i) for i in self.listbox.GetSelections()]
        if len(selected_files) == 0:
            wx.MessageBox("请先选择要压缩的文件!", "错误", wx.OK | wx.ICON_ERROR)
            return
        now = datetime.datetime.now()
        zip_filename = os.path.join(self.target_folder, now.strftime("%Y%m%d") + ".zip")
        with zipfile.ZipFile(zip_filename, 'w') as zipf:
            for file in selected_files:
                file_path = os.path.join(self.source_folder, file)
                zipf.write(file_path, file)
        wx.MessageBox("文件已成功压缩为 ZIP 文件!", "成功", wx.OK | wx.ICON_INFORMATION)
app = wx.App()
frame = MyFrame(None, title="ZIP 文件压缩")
frame.Show()
app.MainLoop()

总结

通过使用 wxPython 模块,我们创建了一个简单而实用的文件压缩工具。该工具具有直观的图形用户界面,可以方便地选择源文件夹和目标文件夹,并将选择的文件压缩为 ZIP 格式。你可以按照自己的需求对代码进行修改和扩展,以满足更多复杂的压缩需求。

到此这篇关于Python中使用 zipfile创建文件压缩工具的文章就介绍到这了,更多相关zipfile文件压缩工具内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django 路由层URLconf的实现

    Django 路由层URLconf的实现

    这篇文章主要介绍了Django 路由层URLconf的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 使用Matplotlib创建基本图表的详细指南

    使用Matplotlib创建基本图表的详细指南

    Matplotlib 是一个功能强大的 Python 库,用于创建各种类型的图表和可视化,在本文中,我们将提供一个完整的指南,介绍如何使用 Matplotlib 创建基本的图表,包括折线图、散点图、柱状图和饼图,感兴趣的小伙伴跟着小编一起来看看吧
    2024-05-05
  • python3写爬取B站视频弹幕功能

    python3写爬取B站视频弹幕功能

    本篇文章给大家讲解一下如何用python3写出爬取B站视频弹幕的功能,有兴趣的读者们参考学习下吧。
    2017-12-12
  • python 示例分享---逻辑推理编程解决八皇后

    python 示例分享---逻辑推理编程解决八皇后

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
    2014-07-07
  • Python3爬虫关于识别点触点选验证码的实例讲解

    Python3爬虫关于识别点触点选验证码的实例讲解

    在本篇文章里小编给大家整理了关于Python3爬虫关于识别点触点选验证码的实例讲解内容,需要的朋友们可以参考下。
    2020-07-07
  • Python数据分析之Numpy库的使用详解

    Python数据分析之Numpy库的使用详解

    NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库
    2021-11-11
  • Python的mysql数据库的更新如何实现

    Python的mysql数据库的更新如何实现

    这篇文章主要介绍了Python的mysql数据库的更新如何实现的相关资料,这里提供实例代码,帮助大家理解应用这部分知识,需要的朋友可以参考下
    2017-07-07
  • 对Python3使运行暂停的方法详解

    对Python3使运行暂停的方法详解

    今天小编就为大家分享一篇对Python3使运行暂停的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • 三分钟教会你用Python+OpenCV批量裁剪xml格式标注的图片

    三分钟教会你用Python+OpenCV批量裁剪xml格式标注的图片

    最近学习网络在线课程的过程中,为了方便课后复习,使用手机截取了大量的图片,下面这篇文章主要给大家介绍了如何通过三分钟教会你用Python+OpenCV批量裁剪xml格式标注图片的相关资料,需要的朋友可以参考下
    2022-01-01
  • 回调函数的意义以及python实现实例

    回调函数的意义以及python实现实例

    本篇文章主要介绍了回调函数的意义以及python实现实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06

最新评论