Programación Web y Scripting > Python
Eliminar archivos duplicados del sistema
RadicalEd:
--- Código: Python ---import hashlib, sys, os #Esta funcion detectara el hash MD5 del archivodef sabersiya(archivo):....archi = open(archivo)....cabeceramd5 = hashlib.md5(archi.read()).hexdigest()....archi.close()....return cabeceramd5 todo = os.walk(sys.argv[1])#Diccionario para guardar los datosdic = {}#Esta variable sera el nombre de los indicesx = 0#Recorremos el arbol de directorios#todo = os.walk('.')for path, dirname, filename in todo:....for x in filename:........var = '%s/%s' % (path, x)........dic[var] = sabersiya(var)........#Verificamos que sea el mismo hash, pero diferente clavefor h in dic:....for hh in dic:........if dic.get(h) == dic.get(hh) and h != hh:............#print '%s/%s --> %s/%s' % (h, dic.get(h),hh, dic.get(hh))............try:................#Eliminamos el archivo................os.remove('%s' % (hh))................print 'El archivo eliminado fue %s' % (hh)............except:................pass
orosius1000:
Hola edo!
Oye, para que sirve ese codigo¿?
nachete_222:
hola,
se que estoy rescatando un tema antiguo, pero cada vez que busco código para "eliminar archivos duplicados" en python me sale este programa.
que ha sido diseminado por la red y se hace referencia a el en distintos blogs y foros.
pues bien, el código básicamente pretende eliminar archivos duplicados y dejar una sola copia de cada archivo, y básicamente "Falla" en el propósito para el que fue creado. Esto es uno de esos errores lógicos de los que tanto se habla en los libros, uno de esos que no tira advertencias y que hace que el resultado del programa no cumpla con el cometido para el que fue creado.
en primer lugar se define una función que devuelve el hash md5 de cada uno de los archivos en el árbol de directorios, luego se crea un diccionario con los nombres de los archivos como claves y con las sumas md5 como valores, y ahora se pretende comparar los archivos unos con otros y borrar los que tengan el mismo valor pero distinta clave. Y es aquí donde esta el error, estamos comparando las entradas del diccionario con 2 bucles anidados, y estamos borrando archivos en el árbol de directorios, las entradas del diccionario no se borran, así que básicamente un archivo que haya sido borrado mantiene su entrada en el diccionario y tarde o temprano se comparara con otro de los duplicados, dando como resultado el borrado de este también.
en resumen, lo que pasará es que se borrarán "todos" los archivos, incluso los originales
RadicalEd:
Miércoles, no me había fijado :losiento: lo arreglaré y lo volveré a publicar.
PD. En qué blogs y foros lo has visto, no puedo creer que uno de mis código esté difundido por Internet :kicking:
nachete_222:
aquí hay uno:
--- Código: ---http://radicalpython.blogspot.com.es/2009/05/eliminar-archivos-duplicados-en-el-pc.html
--- Fin del código ---
Navegación
[#] Página Siguiente
Ir a la versión completa