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 !!!
3 Antworten
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()
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.
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?
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.