使用Python Paramiko从SFTP服务器读取.csv文件到内存

时间:2019-06-18 15:16:46

标签: python pandas sftp paramiko

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

例如,我要复制:

df = pd.read_csv(...)

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

我该怎么做?

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

1 个答案:

答案 0 :(得分:1)

假设您正在使用Paramiko SFTP库,请使用SFTPClient.open method

f = sftp.open(path)
df = pd.read_csv(f)
f.close()