簡體   English   中英

Python ZipFile 模塊緩慢提取受密碼保護的 zip

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM