以Python递归列出FTP目录

时间:2011-12-30 05:41:33

标签: python ftp directory-structure

我在远程FTP站点上检索目录列表时遇到了困难。 This回答不起作用(我没有输出,似乎挂起)。

这是我能想到的最简单的实现 - 它应该打印出它找到的每个目录的完整路径:

import ftplib

def ftp_walk(ftp):    
print 'Path:', ftp.pwd()
    dirs = ftp.nlst()
    for item in (path for path in dirs if path not in ('.', '..')):
        try:
            ftp.cwd(item)
            print 'Changed to', ftp.pwd()
            ftp_walk(ftp)
            ftp.cwd('..')
        except Exception, e:
            print item, e

ftp = ftplib.FTP('ftp.site.com')                                        
ftp.login('user', 'pass')
ftp.cwd('1')
ftp_walk(ftp)

我的目录结构是:

1/
 1-1/
   1-2/
 1-2/
 1-3/
 1-4

但是,它只输出以下内容。它建议将工作目录更改为一个新的子目录,但是当使用新的cwd调用ftp_walk()时,它不会再进一步​​:

> Path: 1/
> Changed to 1-1/

2 个答案:

答案 0 :(得分:0)

好吧,我想您登录的用户可以访问所有结构,否则会返回错误并且不会列出该特定目录。

如果您遇到异常,请将其放在此处。也许你应该try..finally你的cwd,这样它就不会迷路。我可以建议:

    try:
        ftp.cwd(item)
        print 'Changed to', ftp.pwd()
        try:
            ftp_walk(ftp)
        finally:
            ftp.cwd('..')
    except ftplib.error_perm, e:
        print item, e

答案 1 :(得分:0)

ftp.login('user', 'pass')之前和构造函数之后,您需要调用ftp.connect()