2012-09-06 7 views
6

Hallo, ich benutze Python und versuchen, eine Verbindung zu sftp und wollen eine XML-Datei von dort abrufen und müssen in meinem lokalen System, unten der Code istWie alle Ordner und Dateien in dem Verzeichnis nach der Verbindung über sftp in Python auflisten

import paramiko 

sftpURL = 'sftp.somewebsite.com' 
sftpUser = 'user_name' 
sftpPass = 'password' 

ssh = paramiko.SSHClient() 
# automatically add keys without requiring human intervention 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 

ssh.connect(sftpURL, username=sftpUser, password=sftpPass) 

ftp = ssh.open_sftp() 
files = ftp.listdir() 
print files 

hier Verbindung ist Erfolg voll und jetzt will ich alle Ordner und alle Dateien sehen und für das Abrufen von xML-Datei von dort zum gewünschten Ordner eingeben, benötigen.

Endlich ist es meine Absicht, alle Ordner und Dateien nach der Verbindung zu sftp Server anzuzeigen. In dem obigen Code i ftp.listdir() durch welche benutzt hatte, bekam ich Ausgabe als etwas, was wie unter

['.bash_logout', '.bash_profile', '.bashrc', '.mozilla', 'testfile_248.xml'] 

Ich möchte wissen, ob diese die einzigen Dateien vorhanden sind?

Und der Befehl, den ich oben verwendete, ist richtig, um die Ordner auch zu sehen?

Was der Befehl die Ordner und Dateien all

Antwort

8

Eine schnelle Lösung ist in ftp.listdir() zu sehen ist die Ausgabe von lstat jedes Objekt zu untersuchen.

So können Sie alle Verzeichnisse auflisten.

>>> for i in ftp.listdir(): 
...  lstatout=str(ftp.lstat(i)).split()[0] 
...  if 'd' in lstatout: print i, 'is a directory' 
... 

Dateien sind das Gegenteil Suche:

>>> for i in ftp.listdir(): 
...  lstatout=str(ftp.lstat(i)).split()[0] 
...  if 'd' not in lstatout: print i, 'is a file' 
... 
+6

Unter Berufung auf dem stringification Verhalten von 'SFTPAttributes' ist ein schrecklicher, schrecklicher Hack. Warum machst du es nicht richtig und benutzt 'stat.S_ISDIR (lstatout.st_mode)'? –

+0

@FakeName Ich versuche das zu tun und ich verstehe deinen Kommentar nicht. –

+0

@PANDAStack - 'ftp.lstat (i)' gibt eine Instanz der Klasse ['SFTPAttributes'] zurück (https://github.com/paramiko/paramiko/blob/6978c7a0b8faa683b119de3a0c096be31ac4fdc9/paramiko/sftp_attr.py#L25). Die Art und Weise, wie diese Antwort lautet, hängt davon ab, wie die Bibliothek das '__repr__' von' SFTPAttributes' * aussehen * gewählt hat, was eine ** völlig ** für das Debugging von Programmierern ist und wahrscheinlich nicht getestet oder garantiert ist konstant zu sein, sogar über Patch-Versionsnummern. –

Verwandte Themen