为什么Python无法解压WinRAR创建的使用zip方法的密码保护zip文件?

11 投票
3 回答
48332 浏览
提问于 2025-04-18 17:29

我在网上找了很久,但还是没找到解决这个问题的方法。有没有人知道为什么会这样,如果知道的话,能告诉我怎么做吗?

psw="dg"

ZipFile.extractall("data.zip", None, psw)

我遇到的错误是:

TypeError: unbound method extractall() must be called
with ZipFile instance as first argument (got str instance instead)

3 个回答

0

有些文件不知道自己是什么,提取的时间也很长。

比如说,如果提取超过60秒或者时间到了,我想删除原始文件,以取消这个操作。

import pyzipper

with pyzipper.AESZipFile('test.zip', 'r', compression=pyzipper.ZIP_LZMA, encryption=pyzipper.WZ_AES) as extracted_zip:
        extracted_zip.extractall(pwd=str.encode("@apkclub"))
        os.remove(test.zip)
4

为了提供准确的语法而不使用缩写:

from zipfile import ZipFile

str_zipFile = 'FileZip.zip'
str_pwd= 'xxxx'

with ZipFile(str_zipFile) as zipObj:
  zipObj.extractall(pwd = bytes(str_pwd,'utf-8'))
34

因为你用错了方法。:) 从文档来看:

ZipFile.extractall([路径[, 成员[, 密码]]])

这个方法会把压缩包里的所有文件提取到当前的工作目录。路径可以指定一个不同的目录来提取文件。成员是可选的,必须是通过namelist()返回的文件列表中的一部分。密码是用于解压加密文件的密码。

所以你应该在ZipFile对象上调用这个方法,而不是作为静态方法来用。而且你不应该把压缩包的名字作为第一个参数传进去。:)

这样就能正常工作:

from zipfile import ZipFile

with ZipFile('data.zip') as zf:
    zf.extractall(pwd='dg')

编辑,在新版本中使用:

zf.extractall(pwd=b'dg')

撰写回答