2009-08-26 10 views
3

Wie kann ich die zuletzt geänderte Datei aus einer FTP-Verzeichnisliste ermitteln? Ich habe die Max-Funktion auf dem Unix-Zeitstempel lokal verwendet, aber die FTP-Auflistung ist schwieriger zu analysieren. Der Inhalt jeder Zeile ist nur durch ein Leerzeichen getrennt.Python FTP Neueste Datei

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

Ausgang:

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

Mögliche Duplikat [Python ftp die neueste Datei nach dem Datum erhalten] (https://stackoverflow.com/questions/8990598/python-ftp-get -die-zuletzt-Datei-nach-Datum –

Antwort

0

Sie jede Zeile geteilt und das Datum erhalten:

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

dann das Datum analysieren (check out egenix mxDateTime Paket, speziell die DateTimeFromString-Funktion) Erhalten Sie vergleichbare Objekte.

2

das Datum zu analysieren, können Sie (ab Version 2.5 aufwärts) verwenden:

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

einfach einige Korrekturen vorzunehmen:

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

Und die letzte Datei

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 
zu finden
4

Wenn der FTP-Server unterstützt den Befehl MLSD (und möglicherweise tut es), können Sie Verwenden Sie die FTPDirectory Klasse von that Antwort in einer verwandten Frage.

Eine ftplib.FTP Instanz (zB aftp) und eine FTPDirectory Instanz (zB aftpdir), mit dem Server verbinden, .cwd in das Verzeichnis, die Sie wollen, und die Dateien lesen aftpdir.getdata(aftp) verwenden. Danach werden Sie Namen der frischesten Datei erhalten:

import operator 

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