web-dev-qa-db-fra.com

Téléchargement de fichier avec pysftp

J'essaie de charger (et d'enregistrer directement localement) un .csv fichier stocké sur un serveur FTP (protocole SFTP). J'utilise Python en combinaison avec la bibliothèque pysftp. Lorsque je vérifie si le fichier existe, il renvoie VRAI. Mais lorsque j'essaie de charger le fichier, il semble être vide, quoi que j'essaie.

Comment puis-je obtenir (et stocker) le fichier dans mon environnement local? Dois-je manquer quelque chose d'évident?

import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

# Make connection to sFTP
with pysftp.Connection(hostname,
                       username=sftp_username,
                       password=sftp_pw,
                       cnopts = cnopts
                       ) as sftp:
    sftp.isfile('directory/file.csv')) ## TRUE
    file = sftp.get('directory/file.csv')
    print(file) ## None

sftp.close()
8
Dendrobates

Connection.get ne renvoie rien. Il télécharge le fichier distant sur un chemin local spécifié par l'argument localpath. Si vous ne spécifiez pas l'argument, il télécharge le fichier dans le répertoire de travail actuel.

Vous voulez donc ceci:

sftp.get('directory/file.csv', '/local/path/file.csv')

Si vous voulez vraiment lire le fichier dans une variable (ce que je comprends que vous ne voulez pas vraiment), vous devez utiliser Connection.getfo , comme:

flo = BytesIO()
sftp.getfo(remotepath, flo)

Vous pouvez également utiliser la bibliothèque Paramiko directement (sans le wrapper pysftp).
Voir Lire un fichier du serveur avec SSH en utilisant Python .

14
Martin Prikryl