es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo ignorar o eliminar archivos corruptos en un zip en Python.

Tengo un archivo zip grande (40 GB) y estoy tratando de extraerlo. Pero algunos archivos están dañados. Por lo tanto, cada vez que intento extractall() obtengo el error BadZipfile: CRC-32 incorrecto para el archivo 'nombre_archivo.jpg'. Cuando uso testzip(), puedo ver el primer archivo dañado.
Aquí está el código que estoy usando:

import zipfile

path_to_zip_file = "data.zip"
directory_to_extract_to = "directorio/"

with zipfile.ZipFile(path_to_zip_file, 'r') as zip_ref:
   print(zip_ref.testzip())
   zip_ref.extractall(directory_to_extract_to)

Ahora mi pregunta es, ¿hay alguna manera de ignorar o eliminar el archivo dañado para que pueda continuar con el proceso de descompresión?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de ignorar o eliminar el archivo corrupto para poder continuar con el proceso de descompresión. En lugar de utilizar el método extractall(), puedes utilizar un bucle for para iterar sobre todos los archivos en el archivo zip y extraer cada archivo por separado utilizando el método extract(). Dentro del bucle, puedes utilizar un bloque try-except para capturar el error BadZipfile y continuar con el siguiente archivo si ocurre algún error. Aquí tienes un ejemplo de código:

    import zipfile
    import os
    
    path_to_zip_file = "data.zip"
    directory_to_extract_to = "directorio/"
    
    with zipfile.ZipFile(path_to_zip_file, 'r') as zip_ref:
        for file in zip_ref.namelist():
            try:
                zip_ref.extract(file, directory_to_extract_to)
            except zipfile.BadZipfile as e:
                print(f"Error al extraer {file}: {e}")
                os.remove(file) # eliminar el archivo corrupto
                continue
    

    Este código extrae cada archivo del archivo zip por separado utilizando el método extract(), capturando cualquier error BadZipfile y eliminando el archivo corrupto utilizando el método os.remove(). Si ocurre algún error, el bucle continúa con el siguiente archivo.

Comments are closed.