Python中使用?zipfile創(chuàng)建文件壓縮工具
在本篇博客中,我們將使用 wxPython 模塊創(chuàng)建一個(gè)簡單的文件壓縮工具。該工具具有圖形用戶界面(GUI),可以選擇源文件夾中的文件,將其壓縮為 ZIP 文件,并將壓縮文件保存到目標(biāo)文件夾中。C:\pythoncode\new\zipmultifile.py

準(zhǔn)備工作
在開始之前,請(qǐng)確保已經(jīng)安裝了 wxPython 模塊。你可以使用以下命令來安裝:
pip install wxPython
創(chuàng)建 GUI 界面
首先,我們導(dǎo)入所需的模塊,并創(chuàng)建一個(gè) MyFrame 類來表示我們的應(yīng)用程序窗口。
import wx
import wx.lib.agw.multidirdialog as MDD
import os
import datetime
import zipfile
class MyFrame(wx.Frame):
# ...在 MyFrame 類的構(gòu)造函數(shù)中,我們創(chuàng)建了窗口上的各個(gè)控件,包括選擇源文件夾的按鈕、顯示文件列表的 Listbox、選擇目標(biāo)文件夾的按鈕以及 Zip 按鈕。我們還定義了兩個(gè)實(shí)例變量 source_folder 和 target_folder 分別用于存儲(chǔ)選擇的源文件夾和目標(biāo)文件夾的路徑。
實(shí)現(xiàn)事件處理函數(shù)
我們?yōu)檫x擇源文件夾按鈕綁定了 on_select_source_folder 方法,該方法會(huì)打開文件夾選擇對(duì)話框,并在選擇完成后加載文件列表到 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()類似地,我們?yōu)檫x擇目標(biāo)文件夾按鈕綁定了 on_select_target_folder 方法,該方法會(huì)打開文件夾選擇對(duì)話框,并在選擇完成后存儲(chǔ)目標(biāo)文件夾的路徑。
def on_select_target_folder(self, event):
dlg = MDD.MultiDirDialog(self, title="選擇目標(biāo)文件夾")
if dlg.ShowModal() == wx.ID_OK:
self.target_folder = dlg.GetPaths()[0]
dlg.Destroy()最后,我們?yōu)?Zip 按鈕綁定了 on_zip 方法,該方法會(huì)檢查是否選擇了要壓縮的文件,如果是,則創(chuàng)建一個(gè) ZIP 文件,將選擇的文件添加到壓縮文件中,并保存到目標(biāo)文件夾中。
def on_zip(self, event):
selected_files = [self.listbox.GetString(i) for i in self.listbox.GetSelections()]
if len(selected_files) == 0:
wx.MessageBox("請(qǐng)先選擇要壓縮的文件!", "錯(cuò)誤", 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)啟動(dòng)應(yīng)用程序
最后,我們創(chuàng)建一個(gè) wxPython 應(yīng)用程序?qū)嵗?,并顯示窗口。
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="選擇目標(biāo)文件夾", 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="選擇目標(biāo)文件夾")
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("請(qǐng)先選擇要壓縮的文件!", "錯(cuò)誤", 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()總結(jié)
通過使用 wxPython 模塊,我們創(chuàng)建了一個(gè)簡單而實(shí)用的文件壓縮工具。該工具具有直觀的圖形用戶界面,可以方便地選擇源文件夾和目標(biāo)文件夾,并將選擇的文件壓縮為 ZIP 格式。你可以按照自己的需求對(duì)代碼進(jìn)行修改和擴(kuò)展,以滿足更多復(fù)雜的壓縮需求。
到此這篇關(guān)于Python中使用 zipfile創(chuàng)建文件壓縮工具的文章就介紹到這了,更多相關(guān)zipfile文件壓縮工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django 路由層URLconf的實(shí)現(xiàn)
這篇文章主要介紹了Django 路由層URLconf的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
使用Matplotlib創(chuàng)建基本圖表的詳細(xì)指南
Matplotlib 是一個(gè)功能強(qiáng)大的 Python 庫,用于創(chuàng)建各種類型的圖表和可視化,在本文中,我們將提供一個(gè)完整的指南,介紹如何使用 Matplotlib 創(chuàng)建基本的圖表,包括折線圖、散點(diǎn)圖、柱狀圖和餅圖,感興趣的小伙伴跟著小編一起來看看吧2024-05-05
Python3爬蟲關(guān)于識(shí)別點(diǎn)觸點(diǎn)選驗(yàn)證碼的實(shí)例講解
在本篇文章里小編給大家整理了關(guān)于Python3爬蟲關(guān)于識(shí)別點(diǎn)觸點(diǎn)選驗(yàn)證碼的實(shí)例講解內(nèi)容,需要的朋友們可以參考下。2020-07-07
Python數(shù)據(jù)分析之Numpy庫的使用詳解
NumPy(Numerical Python)是Python的一種開源的數(shù)值計(jì)算擴(kuò)展。這種工具可用來存儲(chǔ)和處理大型矩陣,比Python自身的嵌套列表結(jié)構(gòu)要高效的多(該結(jié)構(gòu)也可以用來表示矩陣(matrix)),支持大量的維度數(shù)組與矩陣運(yùn)算,此外也針對(duì)數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫2021-11-11
Python的mysql數(shù)據(jù)庫的更新如何實(shí)現(xiàn)
這篇文章主要介紹了Python的mysql數(shù)據(jù)庫的更新如何實(shí)現(xiàn)的相關(guān)資料,這里提供實(shí)例代碼,幫助大家理解應(yīng)用這部分知識(shí),需要的朋友可以參考下2017-07-07
三分鐘教會(huì)你用Python+OpenCV批量裁剪xml格式標(biāo)注的圖片
最近學(xué)習(xí)網(wǎng)絡(luò)在線課程的過程中,為了方便課后復(fù)習(xí),使用手機(jī)截取了大量的圖片,下面這篇文章主要給大家介紹了如何通過三分鐘教會(huì)你用Python+OpenCV批量裁剪xml格式標(biāo)注圖片的相關(guān)資料,需要的朋友可以參考下2022-01-01
回調(diào)函數(shù)的意義以及python實(shí)現(xiàn)實(shí)例
本篇文章主要介紹了回調(diào)函數(shù)的意義以及python實(shí)現(xiàn)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06

