¿Como reconocer un archivo corrupto y separarlo?

Alguien sabe como se puede reconocer un archivo corrupto como foto o archivo de texto que esta corrupto y windows no lo puede abrir, lo que necesito es automatizar la tarea que python separe todos los archivos corruptos que pueden haber dentro de un disco entero y despues de separarlos borrarlos.
si alguien me da a un q sea un pequeña mano en el tema les voy a agradecer.
Saludos cordiales.

Tenes dos niveles para atacar el problema

  • el file puede ser leido y tiene el tamaño esperado?

  • los contenidos tienen sentido ?

Para el primero podes leer todo el archivo y ver que no te de error; de la lectura calculas el tamaño del archivo y comparas con el tamaño que te da os.stat [1]

Para el segundo tener que usar librerias que entiendan el formato, lees y ves si te da error; por ejemplo para imagenes usas pillow [2}

Notar que

  • algunas librerias no soportan todas las variantes de un formato, asi que pueden sacar un error en un archivo que es correcto
  • algunas corrupciones no son detectables, por ejemplo si en texto cambiaron algunas letras o en imagenes cambiaron algunos pixeles.

[1] https://docs.python.org/3/library/os.html#os.stat
[2] https://pypi.org/project/Pillow/

1 me gusta

Claro lo que yo busco es que poder detectar un archivo corrupto como por ejemplo: si en una foto jpg la editas con un txt y borras la primer linea ya pasa a ser un archivo corrupto que en windows no podes abrir, pèro como hacemos para que python detecte esa corrupcion? por que sino se puede detectar eso entonces no podemos reemplazar al humano y automatizar, ya que en recuperacion de datos hay un porcentaje de archivos que quedan corruptos, limpiar esas carpetas manualmente lleva mucho ya que pueden haber muchos discos de 1TB y abrir archivo por archivo de forma manual para saber cuales abren y cuales nos es un trabajo muy demandante, pero por ahora no encuentro la forma de automatizarlo.

Cargas la imagen con pillow, si te da error esta corrupto.

Como mencioné antes, que la cargue sin errores no quiere decir que ‘es la imagen que deberia ser’, porque en la transmision-almacenamiento puede haberse cambiado un par de bytes, la imagen ser valida pero distinta.

Para detectar eso necesitas tener almacenado un hash ‘de la imagen correcta’.

En concreto, en una situacion que vos tenes la imagen original y ka vas a transmitir o almacenar, calculas y guardas el hash de cada file, para verificar no corrupcion recalculas el hash y comparas.

Cuando no tuviste acceso a la data original, por ejemplo si estas intentando recuperar data de un medio dañado, en realidad lo unico que podes verificar es que cumple la especificacion del formato que sea, y esto lo haces leyendo con una libreria que entienda el formato, o quizas llamando a un comando externo con subprocess. De nuevo, no estas garantizando que el file ‘ahora’ es lo que se veia ‘antes’.

1 me gusta

Ok Gracias

Hola, en el caso de imágenes pillow me sirve por que abre la imagen de forma grafica y eso es lo que necesito para q salten estos errores, que cualquier documento se abra de forma grafica, en el caso de archivos de office, pdf y etc, me recomendas alguna otra herramienta ?
desde ya gracias por tu tiempo

Cuanto mas complejo es el formato menos probabilidad de encontrar una lib python que soporte todas las capacidades del formato.

Tambien está el problema de si la lib usa lazy loading: ahi no basta con abrirlo, hay que hacer operaciones que obliguen a leer todo el archivo

Para pdf posiblemente las libs python mantenidas y mas completas serian mupdf [1] y PyPDF4 [2]

Otra opcion seria correr algun comando externo, mejor si le podes pasar params de linea de comando con subprocess e interpretar el returncode y las salidas. Si fuese puramente gui, ahi habria que meter en el fregado librerias de automatizacion de UI.

En particular para pdf en este thread comentan algunas opciones para validar pdf : Validate/verify PDF files integrity - Super User

Para otros formatos complejos, como ser salidas de procesadores de texto o de hoja de calculo buscaria que encontras bajo ‘validate xyz file’ o similar.

[1] mupdf · PyPI
[2] How to Work With a PDF in Python – Real Python , GitHub - claird/PyPDF4: A utility to read and write PDFs with Python