2011-05-29 121 views
3

我想列出一个ftp目录下的所有目录,然后输入它们中的每一个。 问题是我的代码也列出了文件,并尝试输入它们。Python ftp只列出目录而不是文件

  1. 有没有办法从方法ftp.cwd获取返回值?
  2. 有没有办法只获取目录名称,或者有更好的方式来做我想做的事情。

这是我现在使用的代码:

from ftplib import FTP 
    ftp = FTP('ftp.overtherainbow.com') 
    ftp.login() 
    for name in ftp.nlst(): 
     print "listing: " + name 
     ftp.cwd(name) 
     ftp.retrlines('LIST') 
     ftp.cwd('../') 

回答

4

FTP协议没有目录和文件区分(如上市)的方式。我认为最好的办法是尝试和失败

try: 
    ftp.cwd(name) 
except ftplib.error_perm as detail: 
    print("It's probably not a directory:", detail) 

否则你可能想要解析目录列表的输出。尽管如此,这不会是平台独立的,因为目录列表不同于OS到OS。 如图所示here...

1

这有点难看,但ftplib似乎不是很容易使用。

>>> x=[] 
>>> ftp.dir('-d','*/',lambda L:x.append(L.split()[-1])) 
>>> x 
['access-logs/', 'etc/', 'mail/', 'perl/', 'proxy/', 'public_ftp/', 'public_html/', 'subversion/', 'tmp/', 'web/', 'www/'] 
0

为我工作:

def get_current_dir_subdirs(self): 
    ret = [] 
    self.ftp.dir("",ret.append) 
    ret = [x.split()[-1] for x in ret if x.startswith("d")] 
    return ret 
相关问题