我在远程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/
答案 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()
。