why can't python unzip a password protected zip file created by winrar using the zip method?

Question:

I have searched the web high and low but still couldn’t find a solution for the above problem. Does anyone out there know why and if so how it can be done?

psw="dg"

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

The error that I’ve got:

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

||

Answers:

Because you are using it wrong. 🙂 From docs:

ZipFile.extractall([path[, members[, pwd]]])

Extract all members from the archive to the current working directory.
path specifies a different directory to extract to. members is optional and must be a subset of the list returned by namelist(). pwd
is the password used for encrypted files.

So you should call that this function for ZipFile object, not as static method. And you should not pass name of archive as a first argument. 🙂

this way it’ll work:

from zipfile import ZipFile

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

EDIT, in newer versions use:

zf.extractall(pwd=b'dg')
Answered By: Bruno Gelb

To offer the exact syntaxt without acronym:

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'))
Answered By: Laurent T

Some files do not know what they are from and have long extract.

For example, if it is not extracted for 60 seconds or the time is passed, I want to delete the original file to cancel the operation.

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)
Answered By: aziz n
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.