2012-09-06 65 views
6

您好我正在使用python并试图连接到sftp并希望从那里检索一个xml文件,并需要放置在我的本地系统,下面是代码如何列出目录中的所有文件夹和文件通过python连接后通过sftp

import paramiko 

sftpURL = 'sftp.somewebsite.com' 
sftpUser = 'user_name' 
sftpPass = 'password' 

ssh = paramiko.SSHClient() 
# automatically add keys without requiring human intervention 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 

ssh.connect(sftpURL, username=sftpUser, password=sftpPass) 

ftp = ssh.open_sftp() 
files = ftp.listdir() 
print files 

这里连接是成功的充分,现在我希望看到所有文件夹和所有文件和需要进入到所需的文件夹,从那里获取XML文件。

最后我的目的是在连接到sftp服务器后查看所有文件夹和文件。 在上面的代码中,我曾使用ftp.listdir(),通过它我有一些事情输出像下面

['.bash_logout', '.bash_profile', '.bashrc', '.mozilla', 'testfile_248.xml'] 

我想知道这些是否是唯一的文件存在?

而我上面使用的命令是正确的查看文件夹吗?

什么是查看所有文件夹和文件

回答

8

一个快速的解决方案是检查的每个对象的lstat的输出ftp.listdir()命令。

下面介绍如何列出所有目录。

>>> for i in ftp.listdir(): 
...  lstatout=str(ftp.lstat(i)).split()[0] 
...  if 'd' in lstatout: print i, 'is a directory' 
... 

文件是相反的搜索:

>>> for i in ftp.listdir(): 
...  lstatout=str(ftp.lstat(i)).split()[0] 
...  if 'd' not in lstatout: print i, 'is a file' 
... 
+6

依托'SFTPAttributes'是一个可怕的,可怕的黑客的字符串化行为。你为什么不正确地做,并使用'stat.S_ISDIR(lstatout.st_mode)'? –

+0

@FakeName我正在尝试这样做,但我不理解您的评论。 –

+0

@PANDAStack - 'ftp.lstat(i)'返回类的实例['SFTPAttributes'](https://github.com/paramiko/paramiko/blob/6978c7a0b8faa683b119de3a0c096be31ac4fdc9/paramiko/sftp_attr.py#L25)。这个答案的方式取决于库如何选择'SFTPAttributes' * look *的'__repr__',这是一个完全**设计的接口,用于程序员调试,并且可能未经测试或保证即使在补丁版本号中也是如此。 –

相关问题