使用pysftp下载文件
问题描述:
我试图加载(并直接保存在本地)存储在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()
答
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。