Seite 1 von 1
FTP: Feststellen ob es ein Verzeichnis ist
Verfasst: Mittwoch 11. November 2009, 13:59
von baracuda
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
Verfasst: Mittwoch 11. November 2009, 14:50
von ms4py
Muss es denn unbedingt der ``NLST`` Befehl sein? Bei ``LIST`` wird das ja ausgegeben...
Verfasst: Mittwoch 11. November 2009, 19:43
von baracuda
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?
Verfasst: Mittwoch 11. November 2009, 19:56
von ms4py
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

).
Verfasst: Mittwoch 11. November 2009, 21:21
von baracuda
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
Verfasst: Mittwoch 11. November 2009, 21:25
von Dav1d
.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']
Verfasst: Mittwoch 11. November 2009, 22:18
von snafu
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()`.
Verfasst: Samstag 14. November 2009, 08:09
von baracuda
Danke, jetzt funktionierts

Verfasst: Samstag 14. November 2009, 10:28
von lunar
@Dav1d: Dateinamen können auch Leerzeichen enthalten.
Verfasst: Samstag 14. November 2009, 11:25
von sma
Code: Alles auswählen
"drwxr-xr-x 2 330 330 2048 Jul 29 11:53 _css folder".split(None, 8)
Stefan
Verfasst: Samstag 14. November 2009, 13:55
von Dav1d
lunar hat geschrieben:@Dav1d: Dateinamen können auch Leerzeichen enthalten.
Stimmt das hab ich nicht bedacht,
Wieso funktioniert sma's Lösung?
2whitespaces = None?
Verfasst: Samstag 14. November 2009, 13:59
von lunar
@Dav1d: Lies doch bitte einfach die Dokumentation zu str.split().
Verfasst: Samstag 14. November 2009, 14:02
von Dav1d
Wow, wieder was gelernt
