Bestimmen Sie, ob eine Liste ist ein Verzeichnis oder eine Datei in Python über FTP
Python hat eine standard-Bibliothek Modul ftplib
zum ausführen von FTP-Kommunikation. Es hat zwei Mittel, um ein listing des directory-Inhalts. Man, FTP.nlst()
wieder eine Liste mit dem Inhalt von einem Verzeichnis einen Verzeichnis-Namen als argument. (Wird es wieder den Namen einer Datei, wenn da eine Datei Namen statt.) Dies ist ein robuster Weg, um die Liste der Inhalte eines Verzeichnisses, aber keine Angabe, ob jedes Element in der Liste eine Datei oder ein Verzeichnis. Die andere Methode ist FTP.dir()
gibt, die eine Zeichenfolge formatierte Auflistung des Verzeichnisses Inhalt des Verzeichnisses als argument (oder der Datei-Attribute für eine angegebene Datei name).
Laut eine Vorherige Frage auf Stack Overflow, analysieren die Ergebnisse dir()
können brüchig sein (verschiedenen Servern zurückkehren können verschiedene strings). Ich bin auf der Suche nach einige Weg, um die Liste nur die Verzeichnisse enthalten, in einem anderen Verzeichnis über FTP, aber. Zu den besten meines Wissens, Schaben für eine d
in den Berechtigungen Teil der Zeichenfolge ist die einzige Lösung, die ich mir ausgedacht habe, aber ich denke, ich kann nicht garantieren, dass die Berechtigungen erscheinen in der gleichen Stelle, zwischen verschiedenen Servern. Gibt es eine stabilere Lösung zu identifizieren Verzeichnisse über FTP?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider FTP nicht über einen Befehl, um die Liste nur die Ordner so analysieren die Ergebnisse erhalten Sie von http://ftp.dir() wäre 'am besten'.
Eine einfache app mit der Annahme einer standard-Ergebnis von ls (nicht die windows-ftp)
Standard-FTP-Befehle
Benutzerdefinierte FTP-Befehle
Wenn der FTP-server unterstützt die
MLSD
Befehl, dann prüfen Sie bitte, dass Antwort für ein paar nützliche Klassen (FTPDirectory
undFTPTree
).Anderen Weise davon aus, dass alles, was ein Verzeichnis ist und versuchen Sie, und wechseln Sie in dieses. Wenn das gelingt, ist es ein Verzeichnis, aber wenn dies wirft eine ftplib.error_perm es ist wahrscheinlich eine Datei. Sie können fangen, dann fangen Sie die Ausnahme. Sicher, dies ist nicht wirklich der sicherste ist, aber weder in der Analyse der crazy-string für führende "d".
Beispiel