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

Joh*_*ews 4 python sftp paramiko pandas

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

例如,我想复制:

df = pd.read_csv(...)
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到不同呢?

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
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下方法:

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
Run Code Online (Sandbox Code Playgroud)

但返回这个错误:

df = pd.read_csv(...)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ryl 8

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

with sftp.open(path) as f:
    f.prefetch()
    df = pd.read_csv(f)
Run Code Online (Sandbox Code Playgroud)

为此prefetch,请参阅读取使用 Python Paramiko SFTPClient.open 方法打开的文件速度很慢