Saltar al contenido

Al abrir un archivo zip de tipo de compresión no admitido, se devuelve silenciosamente un flujo de archivos vacío, en lugar de lanzar una excepción

Solución:

La causa es la combinación de:

  • el tipo de compresión de este archivo es tipo 9: Deflate64 / Deflate mejorado (Formato propietario de PKWare, a diferencia del tipo 8 más común)
  • y un error de zipfile: no lanzará una excepción para tipos de compresión no admitidos. Solía ​​devolver silenciosamente un objeto de archivo incorrecto [Section 4.4.5 compression method]. Aargh. Qué falso. ACTUALIZACIÓN: Presenté el error 14313 y se solucionó en 2012, por lo que ahora genera NotImplementedError cuando se desconoce el tipo de compresión.

Una línea de comandos Solución alterna es descomprimir, luego rezip, para obtener una simple tipo 8: desinflado.

zipfile arrojará una excepción en 2.7, 3.2+ Supongo que zipfile nunca podrá manejar el tipo 9, por razones legales. El documento de Python no menciona en absoluto que zipfile no puede manejar otros tipos de compresión 🙁

Mi solución para manejar tipos de compresión que no son compatibles con ZipFile de Python fue confiar en una llamada a 7zip cuando ZipFile.extractall falla.

from zipfile import ZipFile
import subprocess, sys

def Unzip(zipFile, destinationDirectory):
    try:
        with ZipFile(zipFile, 'r') as zipObj:
            # Extract all the contents of zip file in different directory
            zipObj.extractall(destinationDirectory)
    except:
        print("An exception occurred extracting with Python ZipFile library.")
        print("Attempting to extract using 7zip")
        subprocess.Popen(["7z", "e", f"{zipFile}", f"-o{destinationDirectory}", "-y"])
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *