这里有一个关于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])
之类的事情?它如何才能起作用的名称'该文件?
我很欣赏这个如何使代码工作的问题,而不是它是如何运作的,但是我会很感激在理解这一点时提供一些帮助。
干杯
约翰
答案 0 :(得分: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]
确实是一个包含文件名的简单字符串。没什么好看的。