python - 使用pysftp下载文件

标签 python sftp pysftp

我正在尝试加载(并直接在本地保存)存储在 FTP 服务器(SFTP 协议(protocol))上的 .csv 文件。我将 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()

最佳答案

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 包装器)。
参见 Read a file from server with SSH using Python .


强制性警告:不要设置 cnopts.hostkeys = None,除非您不关心安全性。有关正确的解决方案,请参阅 Verify host key with pysftp .

关于python - 使用pysftp下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44632588/

相关文章:

python - Sublime Text 创建新 View

c# - 如何使用 WinSCP (SFTP) 将文件上传到 Azure 存储?

go - sftp O_RDONLY 工作正常,但 O_RDWR 不能

python - pysftp。根据修改日期获取文件

python - 访问 Pandas DataFrame 元素中的列表

python - 在 python lxml 中设置和访问命名空间

python - ssh-agent ssh-add ok in user not in sudo

python - 使用 Paramiko 连接到 SSH/SFTP 服务器时出现 "getaddrinfo failed"

python - 获取使用 pysftp Connection.walktree 迭代的文件和文件夹的属性?

python - 为什么 pysftp 连接不发送文件?卡在 'put'