Seite 1 von 1

ftp download der aktuellsten datei

Verfasst: Donnerstag 28. September 2006, 09:30
von Rasti
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

Re: ftp download der aktuellsten datei

Verfasst: Donnerstag 28. September 2006, 09:58
von gerold
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
:-)

Verfasst: Freitag 29. September 2006, 08:49
von Rasti
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

Verfasst: Freitag 29. September 2006, 09:05
von gerold
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
:-)

Verfasst: Freitag 29. September 2006, 12:26
von Y0Gi
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 :)