2012-09-06 69 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__',這是一個完全**設計的接口,用於程序員調試,並且可能未經測試或保證即使在補丁版本號中也是如此。 –

相關問題