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
FTP: Feststellen ob es ein Verzeichnis ist
``LIST`` geht doch auch mit ``retrlines``baracuda hat geschrieben:ja muss es, denn ich will es ja für eine UI verwenden, da hilft die ausgabe auf der shell wenig...
Meinst du, wie man erkennt, ob es ein Verzeichnis ist?baracuda hat geschrieben: wie realisiert es die funktion list dann überhaupt?
Wenn ja, dann erkennt man es an dem "d" ganz am Anfang vor den Rechten (hast wohl noch nie mit Linux gearbeitet ).
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
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
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
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
.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
Ich würde die Funktionalität hier vererben:
EDIT: `self.retrlines()` geändert in `self.dir()`.
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
Zuletzt geändert von snafu am Samstag 14. November 2009, 09:11, insgesamt 1-mal geändert.
Code: Alles auswählen
"drwxr-xr-x 2 330 330 2048 Jul 29 11:53 _css folder".split(None, 8)
Stimmt das hab ich nicht bedacht,lunar hat geschrieben:@Dav1d: Dateinamen können auch Leerzeichen enthalten.
Wieso funktioniert sma's Lösung?
2whitespaces = None?
the more they change the more they stay the same
Wow, wieder was gelernt
the more they change the more they stay the same