Hallo,
habt ihr eine Idee, wie ich ein Verzeichnis/eine Datei löschen könnte, falls diese älter als xx Tage/Stunden/Min/etc. ist?
Danke!
Verzeichnis löschen, falls älter als...
Hallo auch.
Du kannst den Zeitpunkt der letzten Modifikation einer Datei wie folgt ermitteln:
Ein DatetimeObjekt mit dem aktuellen Zeitpunkt bekommst du mit datetime.datetime.now() und ein Timedelta von 2 Tagen z.B. hiermit two_days = datetime.timedelta(days=2)
Dann kannst du das aktuelle DT-Objekt minus dem Timedelta von 2 Tagen nehmen und prüfen, ob das last_modified DT-Objekt der Datei vor diesem neuen DT-Objekt lag.
>>Masaru<<
Du kannst den Zeitpunkt der letzten Modifikation einer Datei wie folgt ermitteln:
Code: Alles auswählen
import datetime
import os
last_modified = datetime.datetime.fromtimestamp(
os.path.getmtime(r'c:\PfadZumZiel'))
Dann kannst du das aktuelle DT-Objekt minus dem Timedelta von 2 Tagen nehmen und prüfen, ob das last_modified DT-Objekt der Datei vor diesem neuen DT-Objekt lag.
>>Masaru<<
zu umständlich finde ich ...Masaru hat geschrieben:Hallo auch.
Du kannst den Zeitpunkt der letzten Modifikation einer Datei wie folgt ermitteln:Ein DatetimeObjekt mit dem aktuellen Zeitpunkt bekommst du mit datetime.datetime.now() und ein Timedelta von 2 Tagen z.B. hiermit two_days = datetime.timedelta(days=2)Code: Alles auswählen
import datetime import os last_modified = datetime.datetime.fromtimestamp( os.path.getmtime(r'c:\PfadZumZiel'))
Dann kannst du das aktuelle DT-Objekt minus dem Timedelta von 2 Tagen nehmen und prüfen, ob das last_modified DT-Objekt der Datei vor diesem neuen DT-Objekt lag.
>>Masaru<<
einfach prüfen ob m_time < time.time() - 2 * 24 * 60 * 60 ist.
Die modified time ist der 8te index eines os.stat() calls.
Code: Alles auswählen
if os.stat(r'C:\myfile')[8] < time.time() - 2 * 24 * 60 * 60:
# delete file
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich finde es besser, da man keine Indexerei braucht und auch nicht ausrechnen muss wie viele Sekunden ein Tag ist. Apropos, statt ``[8]`` kann man auch auf ``.st_mtime`` zugreifen.Mad-Marty hat geschrieben:zu umständlich finde ich ...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Seit 2.5 kannst du den Index durch das Attribute ``st_mtime`` ersetzen. Auch könntest du gleich ``os.path.getmtime`` nehmen. Das würde die Lesbarkeit ein bisschen erhöhen. Allerdings ist die Berechung ziemlich schlecht lesbar, besonders für Leute wie mich, die so ihre Schwierigkeiten mit Kopfrechnen habenMad-Marty hat geschrieben:zu umständlich finde ich ...Masaru hat geschrieben:Hallo auch.
Du kannst den Zeitpunkt der letzten Modifikation einer Datei wie folgt ermitteln:Ein DatetimeObjekt mit dem aktuellen Zeitpunkt bekommst du mit datetime.datetime.now() und ein Timedelta von 2 Tagen z.B. hiermit two_days = datetime.timedelta(days=2)Code: Alles auswählen
import datetime import os last_modified = datetime.datetime.fromtimestamp( os.path.getmtime(r'c:\PfadZumZiel'))
Dann kannst du das aktuelle DT-Objekt minus dem Timedelta von 2 Tagen nehmen und prüfen, ob das last_modified DT-Objekt der Datei vor diesem neuen DT-Objekt lag.
>>Masaru<<
einfach prüfen ob m_time < time.time() - 2 * 24 * 60 * 60 ist.
Die modified time ist der 8te index eines os.stat() calls.
Code: Alles auswählen
if os.stat(r'C:\myfile')[8] < time.time() - 2 * 24 * 60 * 60: # delete file
Außerdem ist das Ganze untypisiert, da man mit Fließkommazahlen anstatt mit Datumswerten rechnet. Dadurch baut man leichter Rechenfehler ein, und wundert sich dann, warum auf einmal wichtige Daten verschwinden
Der ``datetime``-Code ist nur unwesentlich länger, dafür allerdings besser lesbar und flexibler.
Oha ... das wir mal einer Meinung sind lunar ^^.
Ich finde ... ... ist ein sauberes Stück Code, welches sich leicht erweitern lässt und auch für andere leserlich und verständlich ist.
>>Masaru<<
Ich finde ...
Code: Alles auswählen
import os
from datetime import datetime, timedelta
start_directory = r'x:\Einstiegs\Verzeichnis'
limit_datetime = datetime.now() - timedelta(days=2)
removed = []
not_removed = []
# ganz pedantische sollten noch 'start_directory' pruefen
for root, dirs, files in os.walk(start_directory):
for fname in files:
fpath = os.path.join(root, fname)
last_modified = datetime.fromtimestamp(
os.path.getmtime(fpath))
if last_modified < limit_datetime:
try:
os.remove(fpath)
removed.append(fpath)
except OSError:
not_removed.append(fpath)
# die beiden Listen 'removed' und 'not_removed' koennte
# man nun ausgeben, in eine Logdatei schreiben lassen oder
# auch andersweitig verbraten ;)
>>Masaru<<
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Vielleicht hilft dabei auch: http://www.jorendorff.com/articles/python/path/ Wenn es ein zusätzliches Modul sein darf