2017-04-21 84 views
0

这里的问题涉及到stfp如何操作。我很想知道当我连接到SFTP并下载文件时,“幕后”究竟发生了什么。Python当我读取或尝试读取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]对象“存储”?我在get操作前后都执行了type(server_file[1]),两个结果都是str,这表明对象本身没有改变。所以我不太了解该文件的数据保存在哪里。为什么我不需要做类似my file = sftp.get(server_file[1])的事情?它如何才能处理文件的“名称”?

我不太了解如何使代码正常工作,而是如何操作,但我很感谢在理解这方面的一些帮助。

干杯

约翰

回答

1

看起来像一个误区。

pysftp.get(server_files[1])下载远程文件server_files[1]到本地文件server_files[1]在当前工作目录,因为你不指定localpath(第二)可选参数。

报价pysftp.get documentation(重点煤矿):

了localPath(STR) - 本地路径和文件名复制,目的地。 如果没有指定,文件被复制到本地当前工作目录


所以pd.read_csv(server_files[1])读取本地副本。它没有而是魔法读取远程文件。

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

+0

我认为这是有道理的。除当地工作目录外,这个地方在哪里?由于在我的Python环境中没有任何变化,我可以看到(即没有新变量,没有更改内存)? –

+0

“当前工作目录”默认为您执行脚本的目录。尝试运行'print os.getcwd()'。 –

相关问题