在Python中递归列出FTP目录
检索远程FTP站点上的目录列表时遇到困难。答案不起作用(我没有得到任何输出,它似乎挂起) 这是我能想到的最简单的实现——它应该只打印出找到的每个目录的完整路径:在Python中递归列出FTP目录,python,ftp,directory-structure,Python,Ftp,Directory Structure,检索远程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:
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/
我假设您登录的用户可以访问所有这些结构,否则它将返回一个错误,并且不会列出特定的目录 如果您遇到异常,请将其放在这里。也许你应该试试……最后,你的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
在
ftp.login('user','pass')
之前和构造函数之后,需要调用ftp.connect()
它挂起在哪个函数中?(您可以在代码中添加一些打印语句以查看它发生的位置)此外,您的代码在尝试cwd到某个条目之前不会检查该条目是否为目录。谢谢,我已经编辑了我的问题。我不知道有一种称为元组理解
。第4行的陈述是什么?Eknath-好问题;这是我的一个错误。但是,它会产生与列表理解相同的输出。谢谢您的建议。我找了你的钱,但它仍然挂在同一个地方。我对FTP上的目录做了一些轻微的更改,看起来好像它只挂在不包含子目录的目录上。我不确定这意味着什么,如果有的话。我最近遇到了这个悬而未决的问题,除了网络特权(防火墙等)外,我无法找出是什么原因造成的。无论如何,打开/关闭被动模式是一种解决办法。