Downloading file with pysftp

亡梦爱人 提交于 2019-12-03 12:59:49

问题


I'm trying to load (and directly save locally) a .csv file stored on a FTP Server (SFTP protocol). I'm using Python in combination with pysftp library. When I check if the file exists, it returns TRUE. But when trying to load the file, it seems to be empty, whatever I try.

How can I get (and store) the file to my local environment? Do I miss something obvious?

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

回答1:


Connection.get does not return anything. It downloads the remote file to a local path specified by the localpath argument. If you do not specify the argument, it downloads the file to the current working directory.

So you want this:

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

If you really want to read the file to a variable (what I understand that you actually do not want), you need to use Connection.getfo, like:

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

Alternatively, use Paramiko library directly (without the pysftp wrapper).
See Read a file from server with SSH using Python.



来源:https://stackoverflow.com/questions/44632588/downloading-file-with-pysftp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!