Programación Web y Scripting > Python

 Eliminar archivos duplicados del sistema

<< < (2/2)

RadicalEd:
Ese es mi ex-blog :P

nachete_222:
Hola,

me gustaría hacer un pequeño aporte mas.

Me rondaba la cabeza el tema y no sabia por que, pero tenia en mente que la función sabersiya() no producía un hash md5 correcto al menos en windows, así que lo comprobé, las opciones por defecto al abrir archivos son 'lectura' y 'modo texto', y ya sabemos todos que microsoft es muy particular a la hora de interpretar los saltos de línea, utilizando dos caracteres en lugar de uno solo, el famoso 'retorno de carro' y el 'salto de línea', si abrimos dando las opciones de lectura y modo binario 'rb', conseguimos un código mas portable y mas independiente de la plataforma.

al abrir el archivo se hace con opciones por defecto.
archi = open(archivo) # Esto produce un hash incorrecto

debería abrirse con las opciones 'rb'
archi = open(archivo, 'rb') # Esto produce el hash correcto

aunque yo trabajo en una maquina con linux, la comprobación la he hecho en una maquina windows, no se si en linux pasara lo mismo...
aquí dejo la comprobación:


--- Código: ---C:\Documents and Settings\n\Programacion\Python>md5deep resultados.txt
679b1f3244e3d285bf134ff0de4770fd  C:\Documents and Settings\n\Programacion\Python\resultados.txt

C:\Documents and Settings\n\Programacion\Python>Python
Python 2.7 (r27:82525, Jul  4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win 32
Type "help", "copyright", "credits" or "license" for more information.

>>> import hashlib

>>> def sabersiya(archivo):
...    archi = open(archivo)
...    cabeceramd5 = hashlib.md5(archi.read()).hexdigest()
...    archi.close()
...    return cabeceramd5
...
>>> sabersiya('resultados.txt')
'88e75f1675fba32f982f3ce11eb29d5c'

>>> def sabersiya2(archivo):
...    archi = open(archivo, 'rb')
...    cabeceramd5 = hashlib.md5(archi.read()).hexdigest()
...    archi.close()
...    return cabeceramd5
...
>>> sabersiya2('resultados.txt')
'679b1f3244e3d285bf134ff0de4770fd'
--- Fin del código ---

Para empezar he comprobado el hash con una utilidad conocida 'Md5deep' sobre un archivo
luego he definido la función sabersiya() y he comprobado el resultado, como se puede ver es erróneo, para finalizar he definido la función sabersiya2() con la opción de apertura modificada y la he comprobado sobre el mismo 'sufrido' archivo que ha hecho de conejillo de indias y en esta ocasión se ve que el resultado es correcto.

Un saludo,
Nacho

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa