1

这里有一个关于 stfp 如何运作的问题。当我连接到 SFTP 并下载文件时,我很想了解“幕后”到底发生了什么。

我一直在使用一些连接到 sftp 服务器的继承代码,并列出一个目录:例如

sftp = pysftp.Connection(host='xxxxx', username='xxxx', password='xxxxx', cnopts=cnopts)
sftp.cwd('/some_dir')

server_files = sftp.listdir()

从那里,假设我想读server_files[1]入一个pandas数据框:

我不能简单地尝试读取我想要的文件,即

pd.read_csv(server_files[1])
# FileNotFoundError: [Errno 2] No such file or directory: 

反而; 我必须首先get像下面这样的文件。

sftp.get(server_files[1])
pd.read_csv(server_files[1])
# Success!

这很好用。那里没有问题。但是,我的问题是:

server_files[1]对象“存储”工作记忆的什么地方?我type(server_file[1])在操作之前和之后都执行了get,两个结果都是str,向我表明对象本身没有改变。所以我真的不明白该文件的数据保存在哪里。为什么我不需要做类似的事情my file = sftp.get(server_file[1])?它如何仅对文件的“名称”起作用?

我很欣赏这不是如何使代码工作的问题,而是它如何运行的问题,但尽管如此,我还是希望能在理解这一点上有所帮助。

干杯

约翰

4

1 回答 1

2

看来是误会了。

,将远程文件下载到当前工作目录中的本地文件pysftp.get(server_files[1]),因为您没有指定(第二个)可选参数。server_files[1] server_files[1]localpath

引用pysftp.get文档(强调我的):

localpath (str) -- 要复制的本地路径和文件名,目标。如果未指定,则将文件复制到本地当前工作目录


所以pd.read_csv(server_files[1])读取本地副本。它不会神奇地读取远程文件。

server_files[1]确实是一个包含文件名的简单字符串。没有什么花哨。

于 2017-04-21T06:09:22.257 回答