2017-06-27 3 views
0

Ich bin auf der Suche nach einer Möglichkeit, zusätzliche Dateien basierend auf dem Epochenbezeichner zu entfernen. Wenn ich eine Reihe von Berichten herunterziehe, gibt es einige Berichte mit demselben Namen, die aber eine einzigartige Epoche haben. Ich möchte die frühere entfernen und nur den neuesten Bericht für alle Dateien im Verzeichnis behalten.Entfernen Sie ähnliche Namen Dateien basierend auf Epoch Identifier

ex)

  1. file1-1498592006.csv
  2. file1-1498592004.csv

Jede Hilfe würde geschätzt.

+0

Ich würde mir vorstellen, Sie würden einen regulären Ausdruck verwenden, richtig? – Connor

+0

Regex ist hier zu viel. Ein Split auf '-' ist genug. –

+0

@Coldspeed yeah hast recht, ich habe das Ziel hier falsch verstanden, als ich es zuerst las. – Connor

Antwort

1

Sie können die Dateinamen, die Sie bereits mit einer set gesehen haben, verfolgen. Alle Duplikate können dann gelöscht werden.

seen = set() 
for file in sorted(os.listdir('/path/to/your/reports'), reverse=True): 
    filename = file.rsplit('-', 1)[0] 
    if filename not in seen: 
     seen.add(filename) 
    else: 
     os.unlink(file) 

können Sie os.unlink verwenden, um die Extras zu löschen.

Vielen Dank an @ Błotosmętek dafür: Sie sortieren die Dateien in absteigender Reihenfolge, um sicherzustellen, dass nur der aktuellste Bericht beibehalten wird.

+0

Würde dies nicht nur funktionieren, wenn es nur einen gemeinsamen Dateinamen gäbe, d. H. Ein Verzeichnis, das alle "Datei1" enthält? Es müsste eine Iteration durch alle gängigen Dateinamen geben, denke ich, es sei denn, ich verpasse den Punkt hier – Connor

+0

Nicht so. Jedes Mal, wenn Sie auf einen _new_ Dateinamen stoßen, sagen Sie Datei-2, wird diese Datei beibehalten und der Eintrag zum Satz hinzugefügt. Zukünftige Datei-2's werden bestimmt, um bereits in dem Satz zu existieren und werden gelöscht. –

+1

Sortieren Sie die Dateinamen zuerst absteigend nach dem "Epoche" -Teil, damit die Datei, die Sie behalten, die neueste ist. –

Verwandte Themen