Python FTP仅列出目录,不列出文件
我想列出一个FTP目录下的所有文件夹,然后进入每一个文件夹。问题是我的代码也把文件列出来了,还试图进入这些文件。
- 有没有办法从ftp.cwd这个方法中获取返回值?
- 有没有办法一开始就只获取文件夹的名字,或者有没有更好的方法来实现我想要的功能。
这是我现在使用的代码:
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('../')
4 个回答
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/']
2
这里有一个适用于Python 3.3的解决方案(mlsd):http://docs.python.org/3/library/ftplib.html#ftplib.FTP.mlsd
ftp.nlst和ftp.dir这两个方法在3.3版本中已经被弃用了:建议使用mlsd()方法来代替。
6
FTP协议并没有办法区分目录和文件(在列出时)。我觉得最好的办法就是尝试一下,如果失败了就算了。
try:
ftp.cwd(name)
except ftplib.error_perm as detail:
print("It's probably not a directory:", detail)
或者,你也可以尝试解析目录列表的输出。不过这样做就不太能跨平台了,因为不同的操作系统目录列表的格式是不同的。就像这里所示的那样……