在Python中递归列出FTP目录
我在远程FTP网站上获取目录列表时遇到了困难。这个回答对我没用(我没有任何输出,程序似乎卡住了)。
这是我能想到的最简单的实现方式——它应该能打印出找到的每个目录的完整路径:
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
但是,它只输出了以下内容。这表明工作目录只改变了一次,进入了一个新的子目录,但当用新的当前工作目录调用ftp_walk()时,它没有继续往下走:
> Path: 1/
> Changed to 1-1/
2 个回答
0
在调用 ftp.login('user', 'pass')
之前,以及在构造函数之后,你需要先调用 ftp.connect()
。
0
我想你登录的用户应该有权限访问所有这些结构,否则系统会报错,并且不会列出那个特定的目录。
如果你遇到了异常,请把它放在这里。也许你应该用 try..finally
来处理你的当前工作目录,这样它就不会丢失。可以建议你这样做:
try:
ftp.cwd(item)
print 'Changed to', ftp.pwd()
try:
ftp_walk(ftp)
finally:
ftp.cwd('..')
except ftplib.error_perm, e:
print item, e