Python ZipFile模块提取密码保护的压缩文件速度慢
我正在尝试写一个Python脚本,用来解压一个zip文件:
设备:Beagle-Bone black ~ 1GHz Arm-Cortex-a8
,操作系统是debian wheezy
压缩文件:/home/milo/my.zip,约8 MB
>>> from zipfile import ZipFile
>>> zip = ZipFile("/home/milo/my.zip")
>>> zip.extractall(pwd="tst")
其他一些方法,比如打开、读取、写入zip文件,甚至提取特定文件,效果都是一样的。解压的过程大约需要3到4分钟。
而用普通的解压工具解压同一个文件,只需要不到2秒钟。
有没有人知道我的代码或者Python的zipfile
库出了什么问题?
谢谢,Ajava
2 个回答
1
这是我在回答中的一部分 https://stackoverflow.com/a/72513075/10860732
说实话,Python没有用纯C语言实现zip解密这件事真是有点傻。
所以我用cython做了这个,速度快了17倍。
你只需要从这个链接下载dezip.pyx和setup.py。
https://gist.github.com/zylo117/cb2794c84b459eba301df7b82ddbc1ec
然后安装cython并构建一个cython库。
pip3 install cython
python3 setup.py build_ext --inplace
接着在原来的脚本中加上两行代码就可以运行了。
import zipfile
# add these two lines
from dezip import _ZipDecrypter_C
setattr(zipfile, '_ZipDecrypter', _ZipDecrypter_C)
z = zipfile.ZipFile('./test.zip', 'r')
z.extractall('/tmp/123', None, b'password')
7
这似乎是Python 2.7中的ZipFile模块一个已知的问题。如果你查看ZipFile的文档,里面明确提到:
解密速度非常慢,因为它是用Python写的,而不是用C语言。
如果你需要更快的速度,可以选择在你的代码中调用一个外部程序(比如unzip或7zip),或者确保你处理的压缩文件没有密码保护。