Seite 1 von 1

FTPLIB - dir() sinnvoll lesen

Verfasst: Sonntag 10. Dezember 2006, 03:12
von JackBauer
Hallo,

ich habe folgende Frage:
Ich bastel mir gerade ein FTP-Tool und ich komme eigentlich ganz gut klar, aber mein Problem ist das Einlesen des Verzeichnisses, sprich (dir()). Die Rückgabe von dir() ist total seltsam und ich bin noch nicht hintergekommen, wie ich die einzelnen Teile ansprechen kann (zb. über Liste).
Ich brauche dieses dir() anscheinend, um einen Unterschied zwischen Datei und Verzeichnis zu finden!

Im Moment umgehe ich das Problem mit:

Code: Alles auswählen

    def retr_dir(self):
        self.connect()
        try:
            l=self.ftps.nlst()
            self.ftps.quit()
            return l

        except:
            print "Can't retrieve dir!"
            self.ftps.quit()
nlst() gibt mir eine schöne Liste zurück, jedoch ist kein Unterschied zu Verzeichnissen feststellbar!

Lange Rede, kurzer Sinn:
Wie kann ich das am besten lösen?


Danke schonmal im voraus, hoffe die Frage ist nicht zu dumm. Habe mich jetzt aber Stunden damit beschäftigt und finde keine Lösung :(!

mFG Bauer

Verfasst: Sonntag 10. Dezember 2006, 13:25
von EyDu
Die Lösung liegt doch eigentlich auf der Hand ;-)

Code: Alles auswählen

def ret_dir(ftp):
    result=[]
    data=[]

    ftp.dir(data.append)
    for x in data:
        y=x.split(" ")
        if y[0][0]=="d":
            result.append(y[-1])

    return result
Wie man sieht, gibt das d an erster Stelle an, ob es sich bei dem Eintrag um ein Verzeichnis (directory) handelt. Ich bezweifle aber mal stark, dass mein Weg der einfachste und eleganteste ist.

Wahrscheinlich bekommt man auch noch Probleme, wenn Statistiken oder ähnliches übertragen werden sollten.

Sebastian

Verfasst: Sonntag 10. Dezember 2006, 16:07
von JackBauer
Danke für die Lösung. So funzt es auch halbwegs, aber ich wollte im weiteren halt alle Daten, der Datei ermitteln, d.h. Groesse, Datum usw.
Wie bekomme ich das aus dir() raus?
Ein splittung nach ' ' geht leider nicht, da ein Dateiname durchaus mehrer ' ' enthält und der SPlit befehl, keinen unterschied darin macht.

MFG Bauer

Verfasst: Sonntag 10. Dezember 2006, 16:14
von birkenfeld
Steht der Dateiname nicht zuletzt? Dann split() mit maxsplit-Parameter.

Verfasst: Dienstag 12. Dezember 2006, 22:16
von Joghurt
EyDu hat geschrieben:Wie man sieht, gibt das d an erster Stelle an, ob es sich bei dem Eintrag um ein Verzeichnis (directory) handelt.
Der Vollständigkeit halber möchte ich darauf hinweisen, dass im FTP-Standard nicht festgelegt ist, wie die Ausgabe eines "dir" auszusehen hat. De-Facto geben inzwischen alle FTP-Server das Unix "ls -l" Format zurück, aber einige ältere Windows FTP-Server haben da auch gerne das MS-DOS Format zurückgegeben.