【发布时间】:2020-06-11 04:46:43
【问题描述】:
我正在尝试加载存储在 FTP 服务器(SFTP 协议)上的 .csv 文件。我将 Python 与 pysftp 库结合使用。在 FTP 服务器上,CSV 文件位于 .zip 文件中。有没有办法打开 zip,然后只检索其中的 csv 文件?
提前谢谢你,
import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
# Make connection to sFTP
with pysftp.Connection(hostname,
username=sftp_username,
password=sftp_pw,
cnopts = cnopts
)
with pysftp.cd(download_directory):
with sftp.cd('download_directory'):
print(f'Downloading this file: {filename}')
sftp.get(filename, preserve_mtime=True)
sftp.close()
【问题讨论】:
-
只是为了清楚起见...该 .zip 中还有其他文件吗?
-
注意:SFTP 和 FTP 是非常不同的协议。但这对您的问题无关紧要:开箱即用,我不知道 FTP 和 SFTP 服务器都不允许从服务器端的 ZIP 存档中提取元素。但是专门的服务可以...
-
如果你有 sftp,你可能也有 ssh。运行该文件的远程解压缩,返回流是您想要的 csv 怎么样?
-
ZIP 文件中是否还有其他文件? => 如果您只想要一个很小的 CSV 文件(与巨大的 ZIP 文件相比),那么问题的重点是避免下载整个 ZIP 文件吗?正如@Serge 声称的那样,这并非不可能(您确实必须在本地 提取文件,但您不必为此下载整个ZIP)。 SFTP 绝对可以只下载(ZIP)文件的一部分。还有一些 FTP 服务器。所以重要的是,它是 SFTP 还是 FTP。