mtime letzte 24h

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

Moin,

ich hab da mal ne Frage bezüglich eines backup scripts was ich mir gerade schreibe.
Und zwar wollte ich anhand der mtime die files sichern die in den letzten 24h verändert wurden.

Frage ist nur wie gehe ich das am Besten an?

Meine jetzige Idee wäre, da ich ehrlich gesagt nur sehr begrenzte lust darauf habe mich mit mehren dates (komm gerade nicht auf die mehrzahl von datum) herumzuplagen.
time.time() zu nehmen da kann man einfach mit rumrechnen.
von jetzt -24h und dann schauen ob die mtime irgendwo dazwischen liegt.

Allerdings kommt mir das komisch vor, daher wollte ich mal fragen ob da nicht ne bessere methode gibt die mir her jemand verraten kann.
Also ein einfacheren Weg ne Liste mit files zu bekommen die die letzten 24h (nicht früher/später) verändert wurden.

Sry für wenn die Frage irgendwie doof formuliert ist.
BlackJack

@taake: Ich mag ja das `datetime`-Modul. Damit bekommt man lesbareren Code mit `timedelta` statt 24h in Sekunden auszudrücken.
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

Weiß nicht, ich mag datums kram nicht so, da muss man immer so viel hin und her ...
Daher finde ich time.time() toll - nicht wirklich gut zu lesen aber einfach zu händeln.

Weiß auch nicht warum ich gestern da so probleme mit hatte, gerade eben gings ganz leicht aus der hand ....

Code: Alles auswählen

def dailybackup():
        now = time.time()
        l24h = now - int(86400) # 24h in sec
        for filename in os.listdir( source_dir):
                fileliste = os.path.join(source_dir, filename)
                mtime = os.stat(fileliste).st_mtime
                if mtime > l24h:
                        print fileliste
BlackJack

@taake: Was muss man denn da bitte so viel hin und her? Man muss beim lesen und beim schreiben IMHO *weniger* nachdenken, eben weil es klarer ist.

Wo kommt denn `source_dir` her? Und warum heisst eine Zeichenkette mit einem Pfad `fileliste`?

Code: Alles auswählen

#!/usr/bin/env python
import os
from datetime import datetime as DateTime, timedelta as TimeDelta


def dailybackup(source_dir):
    start_time = DateTime.now() - TimeDelta(hours=24)
    result = list()
    for filename in os.listdir(source_dir):
        path = os.path.join(source_dir, filename)
        modification_time = DateTime.fromtimestamp(os.path.getmtime(path))
        if modification_time >= start_time:
            result.append(path)
    return result
taake
User
Beiträge: 125
Registriert: Donnerstag 14. Oktober 2010, 08:49

Okay das ist wirklich wesentlich hübscher (besser) gelöst.

source_dir ist global definiert, da ich es im script öfters verwende.

Und der name fileliste ist zugegen etwas irreführend, allerdings ist er mir beim schreiben so in kopf gekommen daher hab ich ihn genommen.

Hatte irgendwann mal das problem das ich mit time() und datetime() arbeiten musste (kA mehr warum ist schon etwas her) und das war kein spass, jedenfalls für mich nicht.
Daher nehme ich meist time.time() finde ich besser (logischer) auch wenn man an den stellen kurz nachdenken muss.

Danke übrigens für den rewrite - so lernt man am Besten wenn man danach noch mal sieht wie man es besser macht.
Hab mir python selbst beigebracht daher ist es immer gut zu sehen wies besser geht.
Antworten