File nach Zugriffsdatum sortieren

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Sebi.Schneider
User
Beiträge: 38
Registriert: Freitag 3. Mai 2013, 15:05

Hallo Freunde,

gibt es in Python eine Möglichkeit,
Files nach Zugriffsdatum zu sortieren??

Vielen Dank für die Hilfe
BlackJack

@Sebi.Schneider: Wenn die Information vom Dateisystem erfasst wird und per `os.path.getmtime()` abfragbar ist, dann ja. Sowohl `list.sort()` als auch `sorted()` haben ein `key`-Argument wo man eine Funktion übergeben kann die ein Element bekommt und daraus dann einen Sortierschlüssel berechnen kann. Da müsste man `getmtime()` direkt verwenden können wenn man eine Liste mit Dateipfaden hat.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ha, Blackjack macht etwas falsch, das ich das noch erleben darf :twisted:

`getmtime` gibt die *Modifizierungs*zeit, fuer die *Zugriffs*zeit gibt es `getatime`.
Sebi.Schneider
User
Beiträge: 38
Registriert: Freitag 3. Mai 2013, 15:05

@cofi

ja genau du hast Recht : ) ist getatime

Code: Alles auswählen

for file in os.listdir(PFAD):
            mtime=time.mktime(time.localtime()) 
            #Berechne Differenz zwischen Zeiten in Sekunden
            zeitdiff=(int(mtime)) - int(os.path.getmtime(PFAD+"/"+file))
            
            #Pruefe ob Differen-Sekunden groesser ist als Timeout
            if (zeitdiff > self.timeout):
                if not (os.path.isdir(PFAD+"/"+file)):
                    os.remove(PFAD+"/"+(file))
                    print "File geloscht"
            sorted(os.path.getatime(PFAD+"/"+file))
Fehler: 'float' object is not iterable
Benutzeravatar
snafu
User
Beiträge: 6753
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sebi.Schneider hat geschrieben:

Code: Alles auswählen

sorted(os.path.getatime(PFAD+"/"+file))
Fehler: 'float' object is not iterable
Ja, `getatime()` liefert halt die Zugriffszeit für *eine* Datei als Zahl zurück - daher der Fehler.

In Wirklichkeit willst du ja sehr wahrscheinlich das Ergebnis *aller* Schleifendurchläufe sortieren. Dafür wirst du den Code noch etwas umbauen müssen...
Sebi.Schneider
User
Beiträge: 38
Registriert: Freitag 3. Mai 2013, 15:05

@snafu ja genau, das würde ich gerne wollen...

muss ich die files irgendwie woher in einem Array packen und von da aus lesen :K :K
Benutzeravatar
snafu
User
Beiträge: 6753
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sebi.Schneider hat geschrieben:muss ich die files irgendwie woher in einem Array packen und von da aus lesen :K :K
Ja, richtig. Du erstellst eine Liste und lässt diese dann sortieren. Als Sortierschlüssel verwendest du die Funktion zum Erhalten der Zugriffszeit. Das kann dann (anfängerfreundlich) in etwa so aussehen:

Code: Alles auswählen

import os

def get_atime_sorted(directory):
    result = []
    for filename in os.listdir(directory):
        joined_path = os.path.join(directory, filename)
        if os.path.isfile(joined_path):
            result.append(joined_path)
    return sorted(result, key=os.path.getatime)
Sebi.Schneider
User
Beiträge: 38
Registriert: Freitag 3. Mai 2013, 15:05

Super, Danke ;)
Antworten