23

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

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

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

1 回答 1

35

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

因此,如果您想下载到特定的本地目录,则需要:

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

如果您真的想将文件读取到变量中(我知道您实际上不想要),则需要使用Connection.getfo,例如:

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

或者,直接使用 Paramiko 库(不使用 pysftp 包装器)。
参阅使用 Python 使用 SSH 从服务器读取文件


强制警告:不要设置cnopts.hostkeys = None,除非你不关心安全。有关正确的解决方案,请参阅使用 pysftp 验证主机密钥

于 2017-06-19T14:24:38.810 回答