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()
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 .