![](/img/trans.png)
[英]How to create a password protected zipfile using the zipfile module
[英]Python ZipFile module extracts password protected zips slowly
我正在尝试编写一个 python 脚本,它应该提取一个 zip 文件:
板:Beagle-Bone black ~ 1GHz Arm-Cortex-a8
,debian wheezy Zipfile: /home/milo/my.zip, ~ 8 MB
>>> from zipfile import ZipFile
>>> zip = ZipFile("/home/milo/my.zip")
>>> zip.extractall(pwd="tst")
打开和读取的其他解决方案-> 写入 zipfile 并提取特定文件也具有相同的效果。 提取大约需要3-4分钟。
仅使用 unzip-tool 提取相同的文件只需不到 2 秒。
有谁知道我的代码是什么,甚至是 python zipfile
lib?
谢谢阿爪哇
这似乎是 Python 2.7 中 ZipFile 模块的一个记录问题。 如果您查看ZipFile 的文档,它清楚地提到:
解密非常慢,因为它是在本机 Python 而不是 C 中实现的。
如果您需要更快的性能,您可以从您的代码中调用一个外部程序(如 unzip 或 7zip),或者确保您使用的 zip 文件没有密码保护。
从我的答案复制https://stackoverflow.com/a/72513075/10860732
Python没有在纯c中实现zip解密,这很愚蠢。
所以我用 cython 制作它,它快了 17 倍。
只需从此 gist 中获取 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')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.