FTP: Feststellen ob es ein Verzeichnis ist

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
baracuda
User
Beiträge: 21
Registriert: Mittwoch 5. November 2008, 13:08

Hi,

wie kann man unter zuhilfenahme von dem modul ftplib feststellen, ob ein von server.retrlines("NLST verzeichnis") zurückgegebenes element ein verzeichnis ist?

Ich habe auch schon nach FTP-Befehlen gegoogelt, die in der ftplib nicht als methode zur verfügung stehen, aber im ftp-protokoll. momentan muss ich mir noch damit behelfen, zu versuchen, ob man das verzeichnis auf den pfad wechseln kann, und dann die exception abfangen. wenn es nicht klappt (dann ist es ja eine datei), was aber sehr langsam ist.

danke im voraus
baracuda
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Muss es denn unbedingt der ``NLST`` Befehl sein? Bei ``LIST`` wird das ja ausgegeben...
baracuda
User
Beiträge: 21
Registriert: Mittwoch 5. November 2008, 13:08

ja muss es, denn ich will es ja für eine UI verwenden, da hilft die ausgabe auf der shell wenig... wie realisiert es die funktion list dann überhaupt?
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

baracuda hat geschrieben:ja muss es, denn ich will es ja für eine UI verwenden, da hilft die ausgabe auf der shell wenig...
``LIST`` geht doch auch mit ``retrlines``
baracuda hat geschrieben: wie realisiert es die funktion list dann überhaupt?
Meinst du, wie man erkennt, ob es ein Verzeichnis ist?
Wenn ja, dann erkennt man es an dem "d" ganz am Anfang vor den Rechten (hast wohl noch nie mit Linux gearbeitet :P ).
baracuda
User
Beiträge: 21
Registriert: Mittwoch 5. November 2008, 13:08

gearbeitet schon, aber noch nicht mit kleinigkeiten beschäftigt :)

noch mal eines ganz dumme frage: wie kommt man am besten von einer formatierten ausgabe wie

Code: Alles auswählen

-rw-------    1 330      330            11 Nov 11 03:47 .ftpquota
drwxr-xr-x    2 330      330          2048 Jul 29 11:53 _css

zu berechtigung und datei-/verzeichnisname?
es sind ja mehrere leerzeichen, daher kommt man mit split(" ") zb nicht weiter.
oder andersherum: warum bekommt man so etwas nicht gleich als liste zurückgegeben?

lg
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

.split() geht doch ohne probleme

Code: Alles auswählen

>>> ba = '''-rw-------    1 330      330            11 Nov 11 03:47 .ftpquota
drwxr-xr-x    2 330      330          2048 Jul 29 11:53 _css '''.split()
>>> ba
['-rw-------', '1', '330', '330', '11', 'Nov', '11', '03:47', '.ftpquota', 'drwxr-xr-x', '2', '330', '330', '2048', 'Jul', '29', '11:53', '_css']
the more they change the more they stay the same
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich würde die Funktionalität hier vererben:

Code: Alles auswählen

from ftplib import FTP

class ExtendedFTP(FTP):
    def get_dirs(self, ignore_implied=True):
        """
        Return a list of all dirnames in current location
        Ignore implied `.` and `..` by default
        """
        dirs = []

        def callback(line):
            elems = line.split()
            permissions, dirname = elems[0], elems[-1]
            if permissions.startswith('d'):
                if ignore_implied and dirname in ('.', '..'):
                    # ignore dirname
                    return
                dirs.append(dirname)

        self.dir(callback)
        return dirs
EDIT: `self.retrlines()` geändert in `self.dir()`.
Zuletzt geändert von snafu am Samstag 14. November 2009, 09:11, insgesamt 1-mal geändert.
baracuda
User
Beiträge: 21
Registriert: Mittwoch 5. November 2008, 13:08

Danke, jetzt funktionierts :D
lunar

@Dav1d: Dateinamen können auch Leerzeichen enthalten.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Code: Alles auswählen

"drwxr-xr-x    2 330      330          2048 Jul 29 11:53 _css folder".split(None, 8)
Stefan
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

lunar hat geschrieben:@Dav1d: Dateinamen können auch Leerzeichen enthalten.
Stimmt das hab ich nicht bedacht,

Wieso funktioniert sma's Lösung?

2whitespaces = None?
the more they change the more they stay the same
lunar

@Dav1d: Lies doch bitte einfach die Dokumentation zu str.split().
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Wow, wieder was gelernt ;)
the more they change the more they stay the same
Antworten