使用 Python Paramiko 从 SFTP 服务器读取 .csv 文件到内存
Reading .csv file to memory from SFTP server using Python Paramiko
我正在尝试读取我 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
假设您使用的是 Paramiko SFTP 库,请使用 SFTPClient.open
method:
with sftp.open(path) as f:
f.prefetch()
df = pd.read_csv(f)
为了prefetch
的目的,见 。
我正在尝试读取我 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
假设您使用的是 Paramiko SFTP 库,请使用 SFTPClient.open
method:
with sftp.open(path) as f:
f.prefetch()
df = pd.read_csv(f)
为了prefetch
的目的,见