2017-06-19 100 views
2

我试图加载(并直接保存在本地)存储在FTP服务器(SFTP协议)上的.csv文件。我使用Python与pysftp库结合使用。当我检查文件是否存在时,它返回TRUE。但是,当试图加载文件时,似乎是空的,无论我尝试。使用pysftp下载文件

如何获取(并存储)文件到我的本地环境?我错过了明显的东西吗?

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

回答

2

Connection.get不返回任何东西。它将远程文件下载到由localpath参数指定的本地路径。如果您未指定参数,则会将该文件下载到当前工作目录。

所以,你要这样:

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

如果你真的想要的文件中读取到一个变量(我的理解,你其实不想),您需要使用.getfo,如:

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

或者,直接使用Paramiko库(不包括pysftp包装)。
参见Read a file from server with ssh using python