Finden Sie doppelte Dateien über hashlib?

Ich weiß, dass diese Frage bereits gestellt wurde, und ich habe einige Antworten gesehen, aber diese Frage befasst sich eher mit meinem Code und dem besten Weg, diese Aufgabe zu erfüllen.

Ich möchte ein Verzeichnis durchsuchen und feststellen, ob es in diesem Verzeichnis Duplikate gibt (indem ich MD5-Hashes überprüfe). Folgendes ist mein Code:

import sys
import os
import hashlib

fileSliceLimitation = 5000000 #bytes

# if the file is big, slice trick to avoid to load the whole file into RAM
def getFileHashMD5(filename):
     retval = 0;
     filesize = os.path.getsize(filename)

     if filesize > fileSliceLimitation:
        with open(filename, 'rb') as fh:
          m = hashlib.md5()
          while True:
            data = fh.read(8192)
            if not data:
                break
            m.update(data)
          retval = m.hexdigest()

     else:
        retval = hashlib.md5(open(filename, 'rb').read()).hexdigest()

     return retval

searchdirpath = raw_input("Type directory you wish to search: ")
print ""
print ""    
text_file = open('outPut.txt', 'w')

for dirname, dirnames, filenames in os.walk(searchdirpath):
    # print path to all filenames.
    for filename in filenames:
        fullname = os.path.join(dirname, filename)
        h_md5 = getFileHashMD5 (fullname)
        print h_md5 + " " + fullname
        text_file.write("\n" + h_md5 + " " + fullname)   

# close txt file
text_file.close()


print "\n\n\nReading outPut:"
text_file = open('outPut.txt', 'r')

myListOfHashes = text_file.read()

if h_md5 in myListOfHashes:
    print 'Match: ' + " " + fullname

Dies gibt mir die folgende Ausgabe:

Please type in directory you wish to search using above syntax: /Users/bubble/Desktop/aF

033808bb457f622b05096c2f7699857v /Users/bubble/Desktop/aF/.DS_Store
409d8c1727960fddb7c8b915a76ebd35 /Users/bubble/Desktop/aF/script copy.py
409d8c1727960fddb7c8b915a76ebd25 /Users/bubble/Desktop/aF/script.py
e9289295caefef66eaf3a4dffc4fe11c /Users/bubble/Desktop/aF/simpsons.mov

Reading outPut:
Match:  /Users/bubble/Desktop/aF/simpsons.mov

Meine Idee war:

1) Verzeichnis durchsuchen 2) MD5-Hashes + Dateiname in Textdatei schreiben 3) Textdatei als schreibgeschützt öffnen 4) Verzeichnis erneut durchsuchen und gegen Textdatei prüfen ...

Ich sehe, dass dies kein guter Weg ist und es nicht funktioniert. Das 'Match' druckt nur die allerletzte verarbeitete Datei aus.

Wie kann ich dieses Skript dazu bringen, Duplikate zu finden? Kann mir jemand einen besseren / einfacheren Weg nennen, um diese Aufgabe zu erfüllen?

Vielen Dank für jede Hilfe. Entschuldigung, das ist ein langer Beitrag.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage