web-dev-qa-db-fra.com

Comment répertorier tous les dossiers et fichiers dans le répertoire après la connexion via SFTP IN Python

J'utilise Python et essayez de vous connecter à SFTP et souhaitez récupérer un fichier XML à partir de là et devez le placer dans mon système local. Vous trouverez ci-dessous le code:

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

Ici la connexion est le succès complet. Et maintenant, je souhaite voir tous les dossiers et tous les fichiers et devez entrer dans le dossier requis pour récupérer le fichier XML à partir de là.

Enfin, mon intention est de visualiser tous les dossiers et fichiers après la connexion au serveur SFTP.

Dans le code ci-dessus, j'avais utilisé ftp.listdir() à travers lequel j'ai eu une sortie comme une chose comme ci-dessous

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

Je veux savoir si ce sont les seuls fichiers présents?

Et la commande que j'ai utilisée ci-dessus est juste de voir les dossiers aussi?

Quelle est la commande pour afficher tous les dossiers et fichiers?

18

Les SFTPClient.listdir retourne tout, fichiers et dossiers.

Y avait-il des dossiers pour leur dire des fichiers, d'utiliser SFTPClient.listdir_attr à la place. Il renvoie une collection de SFTPAttributes .

from stat import S_ISDIR, S_ISREG
for entry in sftp.listdir_attr(remotedir):
    mode = entry.st_mode
    if S_ISDIR(mode):
        print(entry.filename + " is folder")
    Elif S_ISREG(mode):
        print(entry.filename + " is file")

La réponse acceptée par @ oz123 est inefficace. SFTPClient.listdir appels internes SFTPClient.listdir_attr et lance la plupart des informations à renvoyer les noms de fichiers et de dossiers uniquement. La réponse a ensuite inutilement et rétricitement de toutes ces données en appelant SFTPClient.lstat Pour chaque fichier.

Voir aussi Comment récupérer des tailles de tous les fichiers SFTP dans un répertoire via Paramiko .


AVERTISSEMENT OBLIGATOIRE: N'utilisez pas AutoAddPolicy - vous perdez une protection contre Attaques MITM en le faisant. Pour une solution correcte, voir paramiko "Server inconnu" .

3
Martin Prikryl