使用 zipfile创建文件压缩工具

在本篇博客中,我们将使用 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 zipfileclass MyFrame(wx.Frame):# ...

MyFrame 类的构造函数中,我们创建了窗口上的各个控件,包括选择源文件夹的按钮、显示文件列表的 Listbox、选择目标文件夹的按钮以及 Zip 按钮。我们还定义了两个实例变量 source_foldertarget_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)returnnow = 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 zipfileclass 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)returnnow = 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 格式。你可以按照自己的需求对代码进行修改和扩展,以满足更多复杂的压缩需求。

希望本篇博客内容对你有所帮助。如果你有任何问题或需要进一步的指导,请随时提问。祝你编程愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/91275.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp项目实践总结(五)自定义底部导航栏

在底部导航栏这个模块,很多时候默认的样式不符合我们的设计规范和需求,因此需要自定义底部导航栏,这样可以满足我们的需求,也可以更加个性化,增加用户体验,下面就介绍如何自定义底部导航栏。 目录 准备导航素材配置页面导航自定义导航栏准备导航素材 要自定义底部导航栏…

JavaScript 手写题

基础手写 全排列(力扣原题) 要求以数组的形式返回字符串参数的所有排列组合。 注意: 字符串参数中的字符无重复且仅包含小写字母返回的排列组合数组不区分顺序const _permute string > {const result []const map new Map()const df…

语言基础篇3——学习第一步,Python环境搭建

环境搭建 基础环境搭建 https://www.python.org/downloads/,以Python3.11.5为例: Install for Windows 提供安装程序或者压缩包,安装程序点击下一步即可,压缩包解压即可,注意配置根目录到系统环境变量PATH。 Ins…

SpringBoot初级开发--多环境配置的集成(9)

在Springboot的开发中,我们经常要切换各种各样的环境配置,比如现在是开发环境,然后又切换到生产环境,这个时候用多环境配置就是一个明智的选择。接下来我们沿用上一章的工程来配置多环境配置工程。 1.准备多环境配置文件 这里我…

HTML基础--Form表单--内联元素

目录 Form表单 表单元素 创建表单 () 文本输入 () 密码输入 单选按钮 () 和 复选框 () 下拉列表 () 和 选项 ()提交按钮 () 重置按钮 () 块元素与行内元素&#xff08;内联元素&#xff09; Form表单 HTML中的表单&#xff08;<form>&#xff09;是一个重要的元…

C语言之练习题

欢迎来到我的&#xff1a;世界 希望作者的文章对你有所帮助&#xff0c;有不足的地方还请指正&#xff0c;大家一起学习交流 ! 目录 前言填空题&#xff1a;第一题第二题第三题第四题 编程题&#xff1a;第一题&#xff1a;第二题&#xff1a; 总结 前言 填空题&#xff1a; …

cookie和session区别

一.Cookie详解 &#xff08;1&#xff09;Cookie是什么 &#xff1f; Cookie&#xff0c;有时也用其复数形式Cookies。类型为“小型文本文件”&#xff0c;是某些网站为了辨别用户身份&#xff0c;进行Session跟踪而储存在用户本地终端上的数据&#xff08;通常经过加密&#…

目标检测后的图像上绘制边界框和标签

效果如图所示&#xff0c;有个遗憾就是CV2在图像上显示中文有点难&#xff0c;也不想用别的了&#xff0c;所以改成了英文&#xff0c;代码在下面了&#xff0c;一定要注意一点&#xff0c;就是标注文件的读取一定要根据自己的实际情况改一下&#xff0c;我的所有图像的标注文件…

宠物赛道,用AI定制宠物头像搞钱项目教程

今天给大家介绍一个非常有趣&#xff0c;而粉丝价值又极高&#xff0c;用AI去定制宠物头像或合照的AI项目。 接触过宠物行业应该知道&#xff0c;获取1位铲屎官到私域&#xff0c;这类用户的价值是极高的&#xff0c;一个宠物粉&#xff0c;是连铲个屎都要花钱的&#xff0c;每…

基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文

背景 前面曾体验过通过零代码、可视化、拖拉拽的方式快速完成了从 MySQL 到 ClickHouse 的数据迁移&#xff0c;但是在实际生产环境&#xff0c;我们在迁移到目标库之前还需要做一些过滤和转换工作&#xff1b;比如&#xff0c;在诗词数据迁移后&#xff0c;发现原来 MySQL 中…

应用TortoiseSVN的SubWCRev管理VisualStudio C#项目编译版本号

首先要安装 TortoiseSVN, 并确保TortoiseSVN的bin目录被加入到系统环境变量Path中。 1、拷贝Porperties目录下的文件AssemblyInfo.cs生成副本AssemblyInfo.template, 作为版本管理的模板文件。 2、修改模板文件中的想要管理的版本号信息 // [assembly: AssemblyVersion(&quo…

深入了解OpenStack:创建定制化QCOW2格式镜像的完全指南

OpenStack 创建自定义的QCOW2格式镜像 前言 建议虚机网络配置为 NAT 或 桥接&#xff0c;因为未来 KVM虚机 需要借助 虚机 的外网能力进行联网安装软件包 虚机在启动前&#xff0c;必须在 VMware Workstation 上为其开启虚拟化引擎 虚拟化 Intel VT-x/EPT 或 AMD-V 安装kvm …