FTPLIB - dir() sinnvoll lesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JackBauer
User
Beiträge: 9
Registriert: Mittwoch 21. Juni 2006, 14:16
Wohnort: Berlin
Kontaktdaten:

Sonntag 10. Dezember 2006, 03:12

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
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Sonntag 10. Dezember 2006, 13:25

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
JackBauer
User
Beiträge: 9
Registriert: Mittwoch 21. Juni 2006, 14:16
Wohnort: Berlin
Kontaktdaten:

Sonntag 10. Dezember 2006, 16:07

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
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Sonntag 10. Dezember 2006, 16:14

Steht der Dateiname nicht zuletzt? Dann split() mit maxsplit-Parameter.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Dienstag 12. Dezember 2006, 22:16

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.
Antworten