【问题标题】:Reading .csv file to memory from SFTP server using Python Paramiko使用 Python Paramiko 从 SFTP 服务器读取 .csv 文件到内存
【发布时间】:2019-06-18 15:16:46
【问题描述】:

我正在尝试在我的 Python 内存中读取 SFTP 上的 CSV 文件。我尝试了以下方法,它适用于 FTP 连接,但不适用于 SFTP。

例如,我想复制:

df = pd.read_csv(...)

但是没有先在本地存储它(原因是因为我想将它作为云函数运行,然后我不希望本地文件在我的缓存中)。

我该怎么做?

def read_file_sftp_local_memory(sftp, path, filename):

    flo = BytesIO()
    path_query = "".join(['RETR ', path, '/', filename])
    sftp.retrbinary(path_query, flo.write)
    flo.seek(0)
    return flo

我还尝试了以下方法:

def read_file_csv(sftp, path, filename):

    # Download
    sftp.get("/".join( os.path.join(path, filename) ), filename)

    # Read
    df = pd.read_csv(filename)

    # Delete
    os.remove(filename)

    # Return
    return df

但是返回这个错误:

raise IOError(text)
OSError: Failure

【问题讨论】:

    标签: python pandas sftp paramiko


    【解决方案1】:

    假设您使用的是 Paramiko SFTP 库,请使用 SFTPClient.open method:

    with sftp.open(path) as f:
        f.prefetch()
        df = pd.read_csv(f)
    

    关于prefetch,请参阅Reading file opened with Python Paramiko SFTPClient.open method is slow

    【讨论】: