Ich hoffe Ihr könnt mir weiter helfen.
Bin leider absoluter Neuling was Python oder sonstige Script- bzw. Programmiersprachen angeht.
Ich versuche schon seit Tagen doppelte Dateien mittels md5-hash zu ermitteln, diese dann in der Ausgabe zu sortieren und auszugeben.
Zum Programm:
Alle Werte werden in eine Liste bzw. in mehreren Listen abgespeichert.
Zuerst werden die Dateien mittels os.walk ermittelt und in eine Liste gespeichert. Danach werden diese Daten an eine md5 Funktion übergeben und auch in eine Liste abgespeichert. Jetzt habe ich zwei Listen die gleich Lang sind. (md5-hash > file)
Erster Listeneintrag md5 entspricht erstem Eintrag file usw.
Danach übergebe ich beide Listen einer (nennen wir sie) Sortierfunktion. Diese ermittelt die Stellen der md5-Liste die doppelt oder mehrfach sind und schreibt sie in einer neuen Liste. Die fiel-Liste wird gleichermaßen in eine neue Liste geschrieben. Das Problem besteht jetzt darin, das die Daten bzw. md5-hashes leider nicht sauber zusammengeführt bzw. vernünftig untereinander geschrieben werden.
(Gleiche md5-hash untereinander und dann die dazu gehörigen Files)
z.B.
8128e7364c4522307a6ab947c8da9998 /home/user/Dokumente/datei
d779bde21ba041798a8771cd6f566234 /home/user/datei
8128e7364c4522307a6ab947c8da9998 /home/user/Download/datei
8128e7364c4522307a6ab947c8da9998 /home/user/Download/datei2
d779bde21ba041798a8771cd6f566234 /home/user/Musik/datei
Es wäre super wenn ihr mir weiter helfen könnt.
Sinn des Programms solle es sein doppelt oder mehrfache Dateien zu finden und diese dann zu löschen (natürlich soll eine Datei erhalten bleiben).
Es wäre natürlich schön wenn dies Sinnvoll geschieht.
Beispiel:
Ich habe einen Ordner mit einem Album (mp3). Des weiteren findet das Programm eine gleich Datei auf der Festplatte die aber nicht in diesem Albumordner ist. Ich möchte natürlich nicht das dieser Albumordner auseinander gerissen wird, sondern nur die Datei die einzeln auf der Platte ist gelöscht wird.
Für Vorschläge und Anregungen wäre ich sehr Dankbar. Wie ich aber ober erwähnt habe bin ich Neuling. Wenn Ihr Codevorschläge bzw. Änderungen macht, wäre nett wenn ihr mir erklärt was im einzelnen in eurem Code passiert. Des weitern sind meine Englischkenntnisse mit rudimentär sehr wohlwollend umschreiben. Bin aber auf einem aufsteigendem Ast.
PS: Ja ich weiß, das es im Internet zu hauf solche Programme gibt. Das Programm soll nur zur Übung dienen.
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
import hashlib
import os
import sys
# Funktionen
def programminfo():
print("Diese Programm dient zur festtellung von doppelten Dateien.\r\n"
"Verwenden Sie das Programm wie folgt:\r\n"
". python daten_info.py /home/benutzer/zum_Ortner")
# Hashwerte bilden
# Noch zu erweitern(sha512), gegebenfals über Klassen realisieren
def hash_md5(path, blocksize=65536):
afile = open(path, 'rb')
hasher = hashlib.md5()
buf = afile.read(blocksize)
while len(buf) > 0:
hasher.update(buf)
buf = afile.read(blocksize)
afile.close()
return hasher.hexdigest()
# Sortieren der mehrfachen Dateien
def sortieren(md5, filedump):
#Variablen in der funktion
d_md5=[]
d_file=[]
for i in range(len(md5)):
if md5.count(md5[i]) >1:
d_md5.append(md5[i])
d_file.append(filedump[i])
return d_md5, d_file
def ausgabe_doppel(md5, file):
for i in range(len(md5)):
print("{0:<32} {1:>1}".format(md5[i],file[i]))
# MainProg
#zu prüfender ortner
try:
testortner=sys.argv[1]
except:
programminfo()
sys.exit()
#testortner = r"/home/user/Musik" #Debug
#Globale variablen im MainProg
filedump = []
md5 = []
#def dateien_finden(testortner):
for root, dir, files in os.walk(testortner):
for filename in files:
if filename not in filedump:
path = os.path.join(root, filename)
filedump.append(path)
#bilden der hashwerte(testortner)
for i in range(len(filedump)):
#print(hash_md5(filedump[i]), filedump[i])
md5.append(hash_md5(filedump[i])) #md5summen in md5 schreiben
d_md5, d_file=sortieren(md5,filedump)
ausgabe_doppel(d_md5,d_file)