IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 【Python开个脑洞】如何做一个运营人员都爱不释手的解压缩小工具 -> 正文阅读

[开发工具]【Python开个脑洞】如何做一个运营人员都爱不释手的解压缩小工具

此前接单做了一个批量解压缩小工具后脑洞大开,打算给运营小姐姐们做一个小工具,解放一下她们时间,同时享受一下小姐姐们的崇拜的眼神......好吧,话不多说,咱们直接开始:

使用场景与需求分析

解释一下使用场景:公司为了数据安全,给所有下载的数据压缩包设置了一个6位数字密码,密码使用短信发送到下载人指定手机上。如果一次下载单个文件,那解压缩很简单,但是如果下载的文件数量较多,一个一个压缩包与密码短信进行配对那就有点让人烦躁了。

因此,小工具要实现的需求就是:能够批量的将压缩包与密码短信文本进行自动匹配,将匹配到的压缩包进行解压缩;同时,要实现一个交互界面,并打包成可执行文件。

分步实现

有了需求,那么就是一步一步实现它:

要打包成exe可执行文件,可以使用pyinstaller进行打包,若要打包文件最小,需要创建一个虚拟环境,安装最少的第三方包,因此,使用pycharm进行虚拟环境创建,并安装需要使用到的包。

图片

?

pycharm创建虚拟环境

安装需要使用到的包:pyinstaller、pyzipper(zipfile不支持我司的压缩包格式解压)

图片

?

安装需要的包

实现交互界面,使用了tkinter

图片

?

思路解析:很基础的页面,不过记得哪个大佬说过,先实现核心的功能,其他的(美化)以后再说。此外,代码中已经把后续写的一些代码贴上了,在实际编写过程中实际上是先预留空位,后续代码实现后补充的。

有了界面,要实现功能

3.1先实现单个文件解压缩的功能

思路解析:上面的代码都有注释就不一一解释了,需要提一下的是,单独建了一个py文件存放这个代码,以便调试以及后续更新功能。

3.2再实现批量解压缩文件的功能

思路解析:这部分代码主要实现读取出所有zip文件,解析短信密码文本,并且进行匹配解压的过程,考虑到方便使用者,因此将文件与密码的匹配设计为多对多的方式,即目录下可能存在相同文件名的压缩包(同名文件可能在子文件夹中),密码文本可能存在重复或多条短信密码均为相同文件名的情形。

此外,解析密码文本是,需要用到正则表达式,找出文本中的文件名与密码的键值对,我使用的是“r'任务名为(.*?) 的压缩包,解压密码为(\d),'”,具体情形需要具体修改。

打包成exe

5.1 打开cmd,进入到虚拟环境的路径中:我的是"D:/work/pythonproject/venv/scripts/activate.bat"

5.2 在cmd中,进入到存放py文件的路径,运行pyinstaller命令,我的是“pyinstaller -Fw unzip_file.py”(命令就不具体解释了,详见pyinstaller的教程)

打包结束后,目录下会出现一个dist目录,里面就是打包好的exe文件了,测试运行了一下,一切正常。

只有11M特别说明:

如果在代码中使用os模块,则在后续打包成exe文件时,会被杀毒软件识别为病毒,所以,一开始就要避免使用os模块。(此前版本代码中使用os.walk进行文件遍历,就踩坑了,还好使用的地方不多,都改成pathlib了)

加个彩蛋

前面那些只是正常的解压缩步骤,适用的场景很小,不能体现咱的水平,咱得憋个大招:搞个暴力破解压缩包密码的功能,要是没收到密码短信或者误删短信了,还是能够解压缩文件,这才牛^_^(后来想了想,似乎这个功能也没什么软用,但就是要折腾,脑洞继续开)。

暴力破解功能实现

暴力破解只针对单个文件,那么直接在前面单个解压文件的程序中增加这个功能即可,由于密码为6位数字,一共有100万种组合,因此单线程肯定是不行的,要上多线程。此外,试验密码的顺序对于破解密码的消耗时间是有巨大影响的,因此,提供一些密码的排序方式供选择“正序、倒序、1优先、2优先等等”,以及一个“随机”方式,如果选择的方式恰好命中了正确密码的范围,那么将大大节约破解时间(有点买彩票的感觉^_^),上代码:

图片

?

暴力破解测试截图破解功能的界面

?由于不想直接体现在程序界面中,因此,破解功能的界面写了一个新的交互界面,代码如下:

图片

?

破解窗口的测试截图将破解功能加入原界面中(隐藏界面)

给压缩包加密码本身是为了数据保密,而暴力破解密码,某种角度看,似乎有点不合适,因此,直接放在界面中不太合适,咱搞个隐藏界面,必须输入密码口令才能打开,至于口令就用“上上下下左右左右BABA”(致敬一下经典,嘿嘿)。

以下代码在原交互界面上增加

图片

?

将装饰器放置在需要装饰的函数前

完成上述步骤后,再次使用pyinstaller进行打包即可。

成品展示

图片

?

破解测试

图片

?

破解程序的测试结果最终总结

之所以开这么一个脑洞,其实主要是设计了一个场景,为了锻炼一下综合的应用能力,把学到的分项知识进行一次融合。

整个过程中用到的模块有:

pyinstaller,打包exe

tkinter,交互界面

pathlib,路径与文件

theater,多线程

queue,多线程通信

itertools.product,求多个可迭代对象的笛卡尔积

random.shuffle,随机打散

在实现过程中,按自己理解进行了分项的拆解实现,以便后续进行功能的迭代;同时,应用了装饰器,在不改变原代码的情况下,增加功能等等。通过这样的过程,加深对各个功能的理解。

?好吧,这次的脑洞先开到这里了,等有时间了咱继续开脑洞。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-12-03 13:14:29  更:2021-12-03 13:16:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:30:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码