2009-08-26 6 views
3

Comment puis-je déterminer le fichier le plus récemment modifié à partir d'une liste de répertoires ftp? J'ai utilisé la fonction max sur l'horodatage unix localement, mais la liste ftp est plus difficile à analyser. Le contenu de chaque ligne est seulement séparé par un espace.Python FTP Fichier le plus récent

from ftplib import FTP 
ftp = FTP('ftp.cwi.nl') 
ftp.login() 
data = [] 
ftp.dir(data.append) 
ftp.quit() 
for line in data: 
    print line 

sortie:

drwxrwsr-x 5 ftp-usr pdmaint  1536 Mar 20 09:48 . 
dr-xr-srwt 105 ftp-usr pdmaint  1536 Mar 21 14:32 .. 
-rw-r--r-- 1 ftp-usr pdmaint  5305 Mar 20 09:48 INDEX 
+0

double possible de [python ftp obtenir le fichier le plus récent par date] (https://stackoverflow.com/questions/8990598/python-ftp-get -le-dernier-fichier-par-date) –

Répondre

0

Vous pouvez diviser chaque ligne et obtenir la date:

date_str = ' '.join(line.split(' ')[5:8]) 

Parse Ensuite, la date (consultez package egenix mxDateTime, en particulier la fonction DateTimeFromString) à obtenir des objets comparables.

2

Pour analyser la date, vous pouvez utiliser (à partir de la version 2.5 et suivantes):

datetime.datetime.strptime('Mar 21 14:32', '%b %d %H:%M') 
4

Juste pour apporter quelques corrections:

date_str = ' '.join(line.split()[5:8]) 
time.strptime(date_str, '%b %d %H:%M') # import time 

Et pour trouver le fichier le plus récent

for line in data: 
    col_list = line.split() 
    date_str = ' '.join(line.split()[5:8]) 
    if datePattern.search(col_list[8]): 
     file_dict[time.strptime(date_str, '%b %d %H:%M')] = col_list[8] 
     date_list = list([key for key, value in file_dict.items()]) 
s = file_dict[max(date_list)] 
print s 
4

Si le serveur FTP prend en charge la commande MLSD (et c'est très probablement le cas), vous pouvez utiliser la classe FTPDirectory de that répondre à une question connexe.

Créer une instance ftplib.FTP (par exemple AFTP) et une instance FTPDirectory (par exemple aftpdir), se connecter au serveur, .cwd dans le répertoire que vous voulez, et lire les fichiers en utilisant aftpdir.getdata(aftp). Après cela, vous obtenez le nom du fichier plus fraîche que:

import operator 

max(aftpdir, key=operator.attrgetter('mtime')).name 
Questions connexes