【问题标题】:Downloading file with pysftp使用 pysftp 下载文件
【发布时间】:2017-11-21 18:56:47
【问题描述】:

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

【问题讨论】:

    标签: python sftp pysftp


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 2020-05-16
      • 2019-03-14
      • 2020-06-11
      • 2018-01-21
      • 1970-01-01
      • 2022-01-23
      • 2023-02-24
      • 1970-01-01
      • 2020-12-25
      相关资源
      最近更新 更多