So löschen Sie Dateien mit einem Python-Skript von einem FTP-server die älter sind als 7 Tage?
Möchte ich schreiben, ein Python-Skript, welches mir erlaubt das löschen von Dateien von einem FTP-Server, nachdem Sie ein gewisses Alter erreicht haben. Ich hab das scipt unter, aber es wirft die Fehlermeldung: WindowsError: [Error 3] The system cannot find the path specified: '/test123/*.*'
Tun jemand eine Idee, wie dieses Problem zu beheben? Vielen Dank im Voraus!
import os, time
from ftplib import FTP
ftp = FTP('127.0.0.1')
print "Automated FTP Maintainance"
print 'Logging in.'
ftp.login('admin', 'admin')
# This is the directory that we want to go to
path = 'test123'
print 'Changing to:' + path
ftp.cwd(path)
files = ftp.retrlines('LIST')
print 'List of Files:' + files
#--everything works fine until here!...
#--The Logic which shall delete the files after the are 7 days old--
now = time.time()
for f in os.listdir(path):
if os.stat(f).st_mtime < now - 7 * 86400:
if os.path.isfile(f):
os.remove(os.path.join(path, f))
except:
exit ("Cannot delete files")
print 'Closing FTP connection'
ftp.close()
- was ist
os.directory
? Dein code macht nur sehr wenig Sinn. Warum sind Sie versuchen zu löschen Dateien von Ihrem lokalen system? - Ich denke, shell/bash-Shell wäre eine bessere alternative zu python
- ja, aber es muss auf windows laufen. also shell / bash ist nicht eine option in diesem Fall.
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK. Vorausgesetzt, dass Ihr FTP-server dies unterstützt die
MLSD
Befehl, machen Sie ein Modul mit dem folgenden code (dies ist der code von einem script, das ich verwenden, um sync-remote-FTP-site mit einem lokalen Verzeichnis):Modul-code
einzigen Verzeichnis zu Fall
Wenn Sie arbeiten möchten, auf die Dateien von einem Verzeichnis, können Sie:
Sollte dies tun, was Sie wollen.
einem Verzeichnis und seinen Nachkommen
Nun, wenn das funktionieren sollte rekursiv, müssen Sie die folgenden zwei änderungen im code für "single directory-Fall":
und
Möglich Nachteil
Den Servern mit denen ich gearbeitet habe hatten keine Probleme mit relativen Pfaden in der
STOR
undDELE
Befehle, sosite.delete
mit einem relativen Pfad gearbeitet auch. Wenn Ihr FTP-server erfordert unwegsamen Dateinamen, sollten Sie zuerst.cwd
zu denpath
zur Verfügung gestellt,.delete
plainftpfile.name
und dann.cwd
zurück zu den base Ordner.'127.0.0.1', 'admin', 'admin'
im code.import ftptool
und später haben die Klassen mit einem Präfix den Namen des Moduls, z.B.folder = ftptool.FTPDirectory()
. ISTM bitte Lesen Sie die Python-tutorial erste; es ist, wie Sie fehlen grundlegende Kenntnisse über Python.field_name
in Kleinbuchstaben als FTP-server wurde wiederType
,Modify
etc und diese prüft fürtype
,modify
etc.Ich zu tun hatte, und es dauerte eine Weile, dachte, ich könnte sparen Sie die Zeit hier. Wir verwenden python mit ftputil Modul installiert:
OK, auch eher als analysieren den code, den Sie gepostet haben, alle weiteren, hier ein Beispiel statt, die möglicherweise setzen Sie auf die richtige Spur.
Starten Sie es und erhalten Sie die Ausgabe so, das sollte ein Anfang gegenüber dem, was Sie zu erreichen versuchen. Um es zu beenden aus, dass Sie müssten, um eine Analyse der ersten Folge in eine datetime, vergleichen Sie es mit "jetzt" und verwenden http://ftp.delete (), um loszuwerden, die remote-Datei wenn es zu alt ist.
Gut, es sieht aus wie die Fehler, die Sie sehen, hat mit der Tatsache zu tun, dass Sie versuchen, zu entfernen 'test123' - Verzeichnis vom lokalen Rechner aus, nicht von der FTP-site. Der FTP-docs haben eine Methode namens löschen, und das ist, was Sie wollen, um zu verwenden, um die Datei zu entfernen. Soweit die Prüfung ob oder ob nicht etwas ist 7 Tage alt oder nicht, können Sie tatsächlich haben, um ziehen Sie die Dateien vom FTP runter vorübergehend dann schauen Sie sich die Zeiten ändern vor der Verwendung http://FTP.delete.
Welchem Betriebssystem laufen Sie auf? Der Pfad der Datei
/test123/*.*
Unix-Stil, aber die Meldung sagtWindowsError
. Nehmen Sie den Ausgang eines ftp LIST-Befehl, der im Unix-Stil, und versuchen, zu verwenden es wörtlich in einer Windows-Skript?