2017-07-09 2 views
1

Ich schreibe ein Python 2.7-Skript, um die neuesten (2) Dateien in einer Liste von all_current_files zu vergleichen, die alle Dateinamen in einem Verzeichnis z. myimage.jpg, myimage1.jpg, etc.Durchlaufen Sie Dateien im Verzeichnis, und vergleichen Sie die letzten 2 Dateien für Duplikate

Zum Beispiel, wenn meine Liste aussieht:

1 myfile1.jpg 
2 myfile2.jpg 
3 myfile3.jpg 
4 myfile4.jpg 
5 myfile5.jpg 
6 myfile6.jpg 

als list = ['myfile1.jpg','myfile2'] definiert etc ..

wenn die Unterschiede zwischen dem Hashes der Datei 6 und 5 war , dann ist die Skript würde nichts tun, wenn es weniger als wäre, würde es löschen.

Ich habe Probleme zu formulieren, wie man die letzten 2 Elemente in der Liste rekursiv vergleicht (beginnend am Ende), bis alle Listenelemente verglichen sind - kann jemand helfen?

Ich habe derzeit:

def purgeDups(): 
    print "purging duplicate images every hour...\n\n" 
    all_current_files = os.listdir('filllll...in...image...dir...here') 
    for file in all_current_files: 
     #check latest file... and compare to second latest file based on timestamp of file, recurse until no more files. 

     #begin comparing files...if difference between latest all_current_files and second latest is less than 5, delete 
     latest = imagehash.average_hash(Image.open(<<latestfilefrom2linesabove>>)) 
     secLatest = imagehash.average_hash(Image.open(<<secondlatestfrom2linesabove>>)) 
     compare = latest-secLatest 
     if int(compare) < 5: 
      os.remove(<<latestfilefrom2linesabove>>) 
      os.remove(<<secondlatestfilefrom2linesabove>>) 

Dank viel.

+0

Wie ermitteln Sie die neuesten Dateien? – PYA

+0

Das ist was ich versuche herauszufinden. Wie bekomme ich die letzten 2 Artikel in einer interativen Natur? Zum Beispiel vergleiche 5 + 6, dann 5 + 4, dann 4 + 3, dann 3 + 2 usw. – John

+1

@John Warum benutzt du nicht einfach eine verschachtelte Schleife und vergleichst alle möglichen Paare? –

Antwort

0

Hier ist keine Rekursion erforderlich. Wenn Sie alle möglichen Paare vergleichen möchten, würde ich empfehlen, eine verschachtelte Schleife wie folgt zu verwenden:

for f1 in os.listdir('.'): 
    for f2 in os.listdir('.'): 
     if f1 == f2 or not os.path.exists(f1) or not os.path.exists(f2): # don't compare the same file, or files that have already been deleted 
      continue 
     ... # file comparison code here 
+0

Danke @Coldspeed - ich frage mich nur, wie f2 auf 'line2' die * vorletzte * Datei noch vergleichen wird? Oder wählt es einfach eine verfügbare Datei aus? – John

+0

'f2' iteriert über alle Dateien. Wenn also' f1' die vorletzte Datei ist und noch existiert, wird sie verglichen. –

+0

Also die Zeile 'wenn f1 == f2 ...' sagt, wenn f1 und f2 existieren, vergleiche sie und fahre fort? – John

Verwandte Themen