Alle.

Ich versuche, ein Skript zu schreiben, das das Alter einiger Dateien in einem Ordner überprüft und die alten Dateien löscht, wenn neue Dateien erstellt wurden. Wenn keine neuen Dateien erstellt wurden, werden die alten Dateien nicht gelöscht, und es wird mir eine E-Mail gesendet, in der mir mitgeteilt wird, dass keine neuen Dateien erstellt wurden.

Ich verwende das Betriebssystemmodul ctime, um das Alter der Dateien zu überprüfen, und ich verwende ein externes Skript "sendmail", um das E-Mail-Versenden zu handhaben.

Da es jetzt funktioniert, werden alte und neue Dateien korrekt ermittelt und dann alte Dateien gelöscht. Es wird jedoch nicht korrekt entschieden, ob sendmail aufgerufen werden soll oder nicht. Lass mich dir zeigen:

for fn in os.listdir(path, f)
 fn = os.path.jion(path, f)
 ctime = os.stat(fn).st_ctime
 if ctime > now - 1 * 86400: #this is a new file
  new_files.append(fn)
  countit = new_files.count(fn) #counting the occurence of appended files
 if new_Files.count(fn) > countit: #checks the list
  import sendmail
   sendmail
 elif ctime < now - 10 * 86400: #checking for old file
  old_files.append(fn)
if new_files:
 for fn in old_files:
  os.remove(fn)

Kann ich hier Hilfe bekommen? Ich stecke wirklich fest. Sollte ich eine elif Anweisung verwenden, um meine Liste zu überprüfen, wie folgt:

if ctime > now - 1 * 86400:
 new_files.append(fn)
elif:
 import sendmail
  sendmail

Ist das eine richtige Art, das zu schreiben? Gibt es einen richtigen Weg, um diese Entscheidung zu schreiben? Ist mein ganzes Skript falsch?

EDIT - Tut mir leid, wenn ich weinerlich bin, ich arbeite schon seit einiger Zeit daran und es ist sehr frustrierend. Ich schätze jede Hilfe, die Sie geben können !!!

0
user1681573 9 Okt. 2012 im 19:53

3 Antworten

Beste Antwort

Es sieht so aus, als ob Sie wahrscheinlich so etwas tun möchten:

for fn in os.listdir(path, f):
    fn = os.path.join(path, f)
    ctime = os.stat(fn).st_ctime
    if ctime > now - 1 * 86400: #this is a new file
        new_files.append(fn)
        countit = new_files.count(fn) #counting the occurrence of appended files
    elif ctime < now - 10 * 86400: #checking for old file
        old_files.append(fn)
if new_files:
    for fn in old_files:
        os.remove(fn)
else:
    import sendmail
        sendmail.sendmail()
1
Matt 9 Okt. 2012 im 16:38

Ich benutze das OS-Modul ctime, um das Alter der Dateien zu überprüfen ...

Hoppla! ctime ist nicht der Zeitpunkt, an dem die Datei auf allen Betriebssystemen erstellt wurde. Verlassen Sie sich nicht darauf, es sei denn, Sie sind sich sicher, auf welchem Betriebssystem Sie sich befinden. mtime ist stattdessen die letzte Änderungszeit, wird jedoch von allen Betriebssystemen unterstützt.

0
Ignacio Vazquez-Abrams 9 Okt. 2012 im 16:20

Ich habe Probleme festzustellen, was genau sendmail tut / was es tun soll. Könnten Sie dieses Modul auch posten?

Außerdem würde ich empfehlen, die import-Anweisung oben in die Datei einzufügen, damit Sie die Datei nicht mehrmals importieren müssen. Dies sollte die Leistung erheblich beschleunigen.

Außerdem habe ich Probleme zu verstehen, was die Zeile "os.listdir (Pfad, f)" tut. Immer wenn ich die Methode os.listdir mit mehr als einem Argument versuche, wird eine Fehlermeldung angezeigt. Ist das ein Tippfehler?

0
HardcoreBro 9 Okt. 2012 im 16:18