使用python制作一个解压缩软件


Posted in Python onNovember 13, 2019

python实现解压缩的重要模块就是——zipfile,其次是os

安装zipfile模块

首先得安装zipfile模块,打开cmd输入一下命令即可安装

pip install zipfile

使用python制作一个解压缩软件

os是python自带的库,所以无需另外安装,直接 import 即可

编写核心代码

压缩文件核心代码:

def zip_file():
  zip_name = path.get() +'.zip'              # 获取绝对路径然后给压缩文件加上.zip结尾   
  z = zipfile.ZipFile(zip_name,'w',zipfile.ZIP_DEFLATED) # 写入.zip
  for dirpath, dirnames, filenames in os.walk(path.get()):# 使用os遍历目录路径,目录名,文件名
    fpath = dirpath.replace(path.get(),'')       # 获取目录路径
    fpath = fpath and fpath + os.sep or ''       
    for filename in filenames:             # 迭代文件名
      z.write(os.path.join(dirpath, filename),fpath+filename) # 写入
  z.close()                        # 关闭资源,以免占用内存
  zip_file_message()                   # 调用zip_file_message弹出信息框

解压文件核心代码:

def unzip_file():
  r = zipfile.is_zipfile(filename.get())     # 判断是否为压缩文件以.zip为判断依据
  if r:                      # 如果是则执行if里面的语句,如果不是执行else里面的语句
    fz = zipfile.ZipFile(filename.get(), 'r')  # 读取压缩文件
    for file in fz.namelist():         # 遍历文件
      fz.extract(file, outputfile.get())   # 输出文件
    unzip_file_message()            # 调用unzip_file_message弹出信息框
  else:
    failed()                  # 调用failed弹出信息框

以上基本可以实现文件的解压和压缩了,但是如果想给别人也能使用呢?比如你想发给你女朋友使用,但是她的电脑没有安装python环境,安装又显得麻烦那怎么弄?没事,我们可以结合tkinter图形界面来整合一下

安装tkinter模块

tkinter是一个图形界面的模块,类似的有pyqt,感兴趣的朋友可以去网上了解一下

安装tkinter,只需使用下面的命令即可安装

pip install tkinter

使用python制作一个解压缩软件

安装成功后,导入我们需要使用的组件

from tkinter import *            # 导入tkinter的所有组件          
from tkinter.filedialog import askdirectory # 导入目录操作库
import tkinter.messagebox          # 弹出消息框
import tkinter.filedialog          # 导入操作文件的库

整合代码

然后整合上面两个核心代码

既然要有图形界面,首先得有界面是吧

root = Tk()       # 初始化
root.mainloop()     # 显示窗口

使用python制作一个解压缩软件

有了界面之后就是把组件(按钮,标签,输入框)噼里啪啦的加上去就行了,这里就不具体描述了

具体代码实现:

from tkinter import *            # 导入tkinter的所有组件          
from tkinter.filedialog import askdirectory # 导入目录操作库
import tkinter.messagebox          # 弹出消息框
import tkinter.filedialog          # 导入操作文件的库

# 界面代码实现
def main():

  # label标签 grid括号中的row代表你的label是放在第几行,column是放在第几列
  Label(root,text = "压缩目录路径:").grid(row = 0, column = 0)

  # Entry是获取输入
  Entry(root, textvariable = path).grid(row = 0, column = 1)

  # 操作按钮
  Button(root, text = "目录选择", command = selectPath).grid(row = 0, column = 2)

  # Label标签
  Label(root,text = "解压目录路径:").grid(row = 1, column = 0)
  
  # Entry是获取输入
  Entry(root, textvariable = filename).grid(row = 1, column = 1)
  
  # 操作按钮
  Button(root, text = "文件选择", command = selectFile).grid(row = 1, column = 2)

  # Label标签
  Label(root,text = "解压到:").grid(row = 2, column = 0)
  
  # Entry是获取输入
  Entry(root, textvariable = outputfile).grid(row = 2, column = 1)
  
  # 操作按钮
  Button(root, text = "解压路径选择", command = outputFlie).grid(row = 2, column = 2)

  # 操作按钮
  Button(root,text="压缩文件",command=zip_file).grid(row=3,column=0)
  
  # 操作按钮
  Button(root,text="解压文件",command=unzip_file).grid(row=3,column=2)

  # 操作按钮
  Button(root,text="退出程序",command=root.quit).grid(row=4,column=1)
  
  #显示操作界面
  root.mainloop()

if __name__ == '__main__':
  root = Tk()       # 初始化
  path = StringVar()    # 显示路径名
  filename = StringVar()  # 显示文件路径名
  outputfile = StringVar() # 显示解压后的文件路径名
  main()          # 调用main函数

最终的界面实现如下:

使用python制作一个解压缩软件

效果展示

使用python制作一个解压缩软件

比如我们现在压缩一个400M的文件在这里插入图片描述

使用python制作一个解压缩软件

压缩之后的文件大小为:

使用python制作一个解压缩软件

压缩的速度还是挺快的,对比一下RAR压缩之后的大小

使用python制作一个解压缩软件

可以看到RAR压缩的好像更小点,但是无太大差别,且压缩速度上RAR要慢一点。反正这是我们自己做的,能做到这样也挺不错了是吧

安装pyinstaller模块

编写完代码之后就是将代码进行打包了,打包需要用到的模块就是 pyinstaller ,安装该模块也是非常简单,只需要使用下面的命令

pip install pyinstaller

打包程序为可执行文件

安装成功之后再次输入命令进行打包

pyinstaller -F -w 你的文件名.py

打包了,打包需要用到的模块就是 pyinstaller ,安装该模块也是非常简单,只需要使用下面的命令

pip install pyinstaller

打包程序为可执行文件

安装成功之后再次输入命令进行打包

pyinstaller -F -w 你的文件名.py

然后会在dist目录下生成一个 “你的文件名的.exe” 的可执行文件,那就大功告成了

总结

以上所述是小编给大家介绍的使用python制作一个解压缩软件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
新手该如何学python怎么学好python?
Oct 07 Python
在Python中处理时间之clock()方法的使用
May 22 Python
python使用wmi模块获取windows下的系统信息 监控系统
Oct 27 Python
python与php实现分割文件代码
Mar 06 Python
python正则实现提取电话功能
Feb 24 Python
python模糊图片过滤的方法
Dec 14 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
Python两个字典键同值相加的几种方法
Mar 05 Python
Python定时器线程池原理详解
Feb 26 Python
解决TensorFlow训练模型及保存数量限制的问题
Mar 03 Python
Python中递归以及递归遍历目录详解
Oct 24 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 #Python
基于python实现把图片转换成素描
Nov 13 #Python
Django连接数据库并实现读写分离过程解析
Nov 13 #Python
Pandas操作CSV文件的读写实现方法
Nov 13 #Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 #Python
Series和DataFrame使用简单入门
Nov 13 #Python
Python实现线性插值和三次样条插值的示例代码
Nov 13 #Python
You might like
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
Python之批量创建文件的实例讲解
2018/05/10 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
python dict 相同key 合并value的实例
2019/01/21 Python
wxPython实现画图板
2020/08/27 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
python super()函数的基本使用
2020/09/10 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
英国鲜花递送:Blossoming Gifts
2020/07/10 全球购物
个人找工作的自我评价
2013/10/17 职场文书
中学优秀班主任事迹材料
2014/05/01 职场文书
群教班子对照检查材料
2014/08/26 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python