ftp download der aktuellsten datei

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Rasti
User
Beiträge: 6
Registriert: Dienstag 16. Mai 2006, 17:41
Wohnort: Wiener Neustadt

Halli Hallo. Schön wiedermal da zu sein.

Hab wiedermal ne Frage:
Möchte von einem ftp Server eine Datei downloaden. Das hab ich gerade noch zusammen gebracht.
Zusätzlich sollte die Datei die aktuellste bzw zweit aktuellste sein.

Wie kann ich das Verzeichnis durchsuchen oder damit arbeiten.
Ich kann ftp Commands absetzen. Aber welche? Sind das standardisierete Commands oder Spezielle?

Im Moment schaut mein Code so aus:

Code: Alles auswählen


    ftp = FTP('xxx.xxx.xxx.xxx')
    ftp.login("xxxx","xxxx")

    ftp.retrlines('LIST')   
    filename = open(r'test.xml' , 'w')
    ftp.retrbinary("retr xxxxxx.xml",filename.write)
    filename.close() 
    ftp.close()

der Dateiname sollte aber dynamisch sein
Wäre für jeden Tip offen :D
Jah Rastafari
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Rasti hat geschrieben:Wie kann ich das Verzeichnis durchsuchen oder damit arbeiten?
Hi Rasti!

So bekommst du das Inhaltsverzeichnis des aktuellen Ordners in eine Liste:

Code: Alles auswählen

>>> import ftplib
>>> ftp = ftplib.FTP(host='xxxxx', user='xxxxx', passwd='xxxxx')
>>> dirlist = []
>>> ftp.retrlines("LIST", lambda line: dirlist.append(line))
'226 Transfer complete.'
>>> dirlist
[
    'drwxr-xr-x   3 gerold   gerold       4096 Sep 28 00:02 log', 
    'drwxr-xr-x   3 gerold   gerold       4096 Apr 24 14:22 public_html'
]
>>> 
Dann noch das Datum jeder Zeile herausparsen und vergleichen.

Aber vorsicht! Denn das Datum enthält bei älteren Dateien statt der Uhrzeit das Jahr. Also musst du prüfen, ob der Datumsstring einen Doppelpunkt enthält oder nicht.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Rasti
User
Beiträge: 6
Registriert: Dienstag 16. Mai 2006, 17:41
Wohnort: Wiener Neustadt

Danke Supi. Habs schon geschafft

Was bedeutet bei

Code: Alles auswählen

ftp.retrlines("LIST", lambda line: dirlist.append(line))
das "lambda line: dirlist.append(line)"

Lg Hansi
Jah Rastafari
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Rasti hat geschrieben:Was bedeutet bei

Code: Alles auswählen

ftp.retrlines("LIST", lambda line: dirlist.append(line))
das "lambda
Hi Rasti!

Der Code:

Code: Alles auswählen

dirlist = []
ftp.retrlines("LIST", lambda line: dirlist.append(line))
ist äquivalent zu

Code: Alles auswählen

dirlist = []
def add_line(line):
    dirlist.append(line)
ftp.retrlines("LIST", add_line)
Siehe: http://docs.python.org/ref/lambdas.html

``ftp.retrlines()`` gibt nicht einfach alle Zeilen in einer Liste zurück, sondern ruft für jede Zeile die zurück kommt die Funktion auf die als zweiter Parameter angegeben wurde. Wird keine Funktion angegeben, dann schreibt ``ftp.retrlines()`` die Ausgabe nach STDOUT. Schwachsinn, aber was solls. :K

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Am Rande: Ich hatte mich gefragt, ob wohl auch Windows-basierte (oder generell nicht unixoide) FTP-Server so ein Listing zurückgeben (nein, ich habe nicht in der RFC nachgesehen ;)). Ein lokaler Test mit GuildFTPd sagt: Ja. Benutzer und Gruppe sind root/root, könnte aber auch variieren (ist aber wohl meistens nicht relevant). Vielleicht bereichert diese Information ja noch jemanden außer mir :)
Antworten