Error de número mágico incorrecto con el módulo ZipFile en Python

Estoy usando Python 2.7 en Windows 7 (64 bits). Cuando bash descomprimir un archivo zip con el módulo ZipFile, aparece el siguiente error:

Traceback (most recent call last): File "unzip.py", line 8, in  z.extract(name) File "C:\Python27\lib\zipfile.py", line 950, in extract return self._extract_member(member, path, pwd) File "C:\Python27\lib\zipfile.py", line 993, in _extract_member source = self.open(member, pwd=pwd) File "C:\Python27\lib\zipfile.py", line 897, in open raise BadZipfile, "Bad magic number for file header" zipfile.BadZipfile: Bad magic number for file header 

WinRAR podría extraer el archivo que estoy intentando extraer bien. Aquí está el código que utilicé para extraer archivos de myzip.zip

 from zipfile import ZipFile z = ZipFile('myzip.zip') //myzip.zip contains just one file, a password protected pdf for name in z.namelist(): z.extract(name) 

Este código funciona bien para muchos otros archivos zip que creé usando WinRAR pero myzip.zip

Intenté comentar las siguientes líneas en Python27\Lib\zipfile.py : –

 if fheader[0:4] != stringFileHeader: raise BadZipfile, "Bad magic number for file header" 

Pero esto realmente no ayudó. Ejecutando mi código con esto en efecto, recibo un poco de volcado en mi shell.

Los archivos ZIP correctos siempre tienen “\ x50 \ x4B \ x03 \ x04” al principio. Puede probar si el archivo es realmente archivo ZIP con este código:

 with open('/path/to/file', 'rb') as MyZip: print(MyZip.read(4)) 

Se imprimirá el encabezado del archivo para que pueda comprobar.

ACTUALIZACIÓN Strange, testzip () y todas las demás funciones funcionan bien. ¿Has probado tal código?

 with zipfile.GzipFile('/path/to/file') as Zip: for ZipMember in Zip.infolist(): Zip.extract(ZipMember, path='/dir/where/to/extract', pwd='your-password') 

Asegúrese de que realmente está abriendo un archivo ZIP, no por ejemplo un archivo RAR nombrado con una extensión .zip. Los archivos zip adecuados tienen un encabezado, que no se encontró en este caso.

El módulo zipfile solo puede abrir archivos zip. WinRAR también puede abrir otros formatos, y es probable que ignore el nombre del archivo y solo lo vea.