2010-12-21 20 views
9

Wie listet man die Dateien in einem Verzeichnis auf Zeitstempel basiert?Verzeichnis-Auflistung basierend auf Zeit

os.listdir() 

Listen in beliebiger Reihenfolge.

Gibt es eine eingebaute Funktion zum Auflisten anhand des Zeitstempels? oder bei irgendeiner Bestellung?

+1

Vielleicht ein Duplikat von http://StackOverflow.com/Q/168409/505893 – bluish

Antwort

37

Sie könnten für jede der Dateien stat() aufrufen und nach einem der Zeitstempel sortieren, möglicherweise mithilfe einer Schlüsselfunktion, die den Zeitstempel einer Datei zurückgibt.

import os 

def sorted_ls(path): 
    mtime = lambda f: os.stat(os.path.join(path, f)).st_mtime 
    return list(sorted(os.listdir(path), key=mtime)) 

print(sorted_ls('documents')) 
+0

könnten Sie dies erklären, da ich nicht weiß, Lambda-Funktionen zu verwenden? – vkris

+2

Sicher, Lambdas sind im Grunde unbenannte Funktionen. Sie können Argumente vor dem Doppelpunkt nehmen (in diesem Fall gibt es einen: f, einen Dateinamen). Der Körper eines Lambda ist ein einzelner Ausdruck, dessen Ergebnis als Rückgabewert des Lambda verwendet wird. Die "sortierte" Funktion nimmt einen iterierbaren Wert (wie eine Liste) und gibt einen Iterator zurück, als eine sortierte Version des gegebenen Iterablen erzeugt. Wenn Sie dem keyword-Argument 'key' eine Funktion zuweisen, können Sie nach etwas anderem als nach der natürlichen Reihenfolge der Elemente im angegebenen iterablen Objekt sortieren. Die Funktion 'mtime' wird für jeden Dateinamen aufgerufen und zum Sortieren der Liste verwendet. – HarryM

+0

Das ist eine nette, clevere Lösung. – jmoz

0

Meine sofortige Lösung ist,

>>> import commands 
>>> a = commands.getstatusoutput("ls -ltr | awk '{print $9}'") 
>>> list =a[1].split('\n') 

Gemäß dem doppelten Beitrag von bläulich zeigte, ist dies eine schlechte Lösung; warum ist es schlecht?

+4

Dies kann in reinem Python getan werden ... keine Notwendigkeit, System-utils zu shell und verwenden (die nicht plattformübergreifend sind). Außerdem sollte "subprocess" anstelle von "commands" verwendet werden. –

Verwandte Themen