我想在ftp目录中列出所有目录,然后输入每个目录。 问题是我的代码也列出了文件,并尝试输入它们。
以下是我现在使用的代码:
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('../')
答案 0 :(得分:5)
FTP协议无法区分目录和文件(如列表所示)。我认为最好的选择是尝试和失败
try:
ftp.cwd(name)
except ftplib.error_perm as detail:
print("It's probably not a directory:", detail)
或者您可能想要解析目录列表中的输出。但这不是平台独立的,因为目录列表因操作系统而异。 如图所示here...
答案 1 :(得分:2)
这是一个Python 3.3解决方案(mlsd): http://docs.python.org/3/library/ftplib.html#ftplib.FTP.mlsd
ftp.nlst和ftp.dir是“从版本3.3开始不推荐使用:改为使用mlsd()。”
答案 2 :(得分: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/']
答案 3 :(得分: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