Comment supprimer des fichiers avec un script Python à partir d'un serveur FTP qui sont âgés de plus de 7 jours?
Je voudrais écrire un script Python qui me permet de supprimer des fichiers depuis un Serveur FTP après qu'ils ont atteint un certain âge. J'ai préparé le scipt ci-dessous, mais il jette le message d'erreur: WindowsError: [Error 3] The system cannot find the path specified: '/test123/*.*'
Faire quelqu'un a une idée de comment résoudre ce problème? Je vous remercie à l'avance!
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()
qu'est-ce que
Je pense que shell/bash serait une meilleure alternative pour python
ouais, mais il doit être exécuté sur windows. par conséquent shell / bash n'est pas une option dans ce cas.
os.directory
? Votre code fait très peu de sens. Pourquoi êtes-vous essayer de supprimer les fichiers à partir de votre système local?Je pense que shell/bash serait une meilleure alternative pour python
ouais, mais il doit être exécuté sur windows. par conséquent shell / bash n'est pas une option dans ce cas.
OriginalL'auteur Tom | 2010-05-19
Vous devez vous connecter pour publier un commentaire.
OK. En supposant que votre serveur FTP prend en charge le
MLSD
de commande, faire un module avec le code suivant (c'est le code d'un script que j'utilise pour synchroniser un site FTP distant avec un répertoire local):module code
seul répertoire cas
Si vous souhaitez travailler sur les fichiers d'un répertoire, vous pouvez:
Cela devrait faire ce que vous voulez.
un répertoire et de ses descendants
Maintenant, si cela doit fonctionner de manière récursive, vous devrez faire les deux modifications suivantes dans le code pour “seul répertoire de cas: les
et
Possible mise en garde
Les serveurs j'ai travaillé avec de ne pas avoir de problèmes avec les chemins relatifs dans le
STOR
etDELE
de commandes, poursite.delete
avec un chemin relatif en fait trop. Si votre serveur FTP nécessite pathless les noms de fichiers, vous devez d'abord.cwd
à lapath
fourni,.delete
la plaineftpfile.name
et puis.cwd
en arrière à la base du dossier.import os, le temps, FTP_AUTO de ftplib importation FTP quite_old= temps.time() - 7*86400 # sept jours # C:\Temp\ftp\test123 site= ftplib.FTP('127.0.0.1, admin, admin') site.mdc(test123) # si c'est un '.', vous pouvez sauter cette ligne de dossier= FTPDirectory() print dossier de dossier de.getdata(site) # obtenir les noms de chemin d'accès, ftpfile dans le dossier.marche(): si ftpfile.mtime < quite_old: site.supprimer(ftpfile.de nom)
admin, admin' n'est pas un nom d'hôte valide; c'est ce que l'erreur est d'environ. Vous signifiait probablement
'127.0.0.1', 'admin', 'admin'
dans votre code.Merci, le lien est maintenant opérationnel. Mais le système a déclaré que: le Fichier "G:/MY_TCS/!!PROJECTS/Q3/FTP_auto_del/python/ftp_del.py" la ligne 6, in <module> dossier= FTPDirectory() NameError: name 'FTPDirectory" n'est pas défini
comment avez-vous le nom de mon module? Avez-vous l'importer au début de ftp_del.py? Si vous avez enregistré mon code comme, par exemple, ftptool.py puis, au début de ftp_del.py vous devriez
import ftptool
et, plus tard, ont les classes préfixé par le nom du module, par exemplefolder = ftptool.FTPDirectory()
. ISTM vous avez besoin de lire le tutoriel Python première; c'est comme s'il vous manque des connaissances de base sur le langage Python.OriginalL'auteur tzot
J'ai eu à le faire et il a fallu un certain temps, pensé que je pourrais enregistrer someones temps ici. Nous sommes à l'aide de python avec ftputil module installé:
OriginalL'auteur user2070320
OK, bien plutôt que d'analyser le code que vous avez posté plus loin, voici un exemple à la place qui pourrait vous mettre sur la bonne voie.
L'exécuter et vous obtiendrez quelque chose de sortie ce qui devrait être un début vers ce que vous essayez d'atteindre. Pour finir, vous auriez besoin d'analyser le premier résultat dans un datetime, de le comparer avec "now" et les utiliser http://ftp.delete() pour se débarrasser des fichiers à distance si elle est trop vieille.
Salut je vous remercie pour votre réponse, je vais essayer de modifier mon code en conséquence.
J'aime la solution , très simple, mais n'est pas complet , nous avons eu affaire avec des dates etc...
OriginalL'auteur eemz
Bien, il semble que l'erreur que vous voyez a à voir avec le fait que vous tentez de supprimer le 'test123 répertoire de votre machine locale, et non pas le site FTP. Le FTP docs ont une méthode appelée supprimer, et c'est ce que vous voulez les utiliser pour supprimer le fichier. Aussi loin que de tester si oui ou non quelque chose est de 7 jours ou pas, vous pouvez en fait avoir à tirer de ces fichiers sur le FTP temporairement de vérifier ensuite la modifier de fois avant de l'utiliser http://FTP.delete.
OriginalL'auteur Ben Hayden
Quel système d'exploitation êtes-vous sur? Le chemin d'accès au fichier
/test123/*.*
est de style Unix, mais le message ditWindowsError
. Prenez-vous la sortie d'un ftp de la LISTE de commande, qui est dans le style Unix, et d'essayer de l'utiliser intégralement dans un script Windows?OriginalL'auteur eemz