Python FTP列出仅目录而不是文件

5

我想列出FTP目录中的所有目录,然后进入每个目录。

问题是我的代码也会列出文件并尝试进入它们。

  1. 有没有办法从ftp.cwd方法中获取返回值?
  2. 有没有办法一开始就只获取目录名称,或者有更好的方法来实现我想要的功能。

这是我现在正在使用的代码:

    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个回答

6

FTP协议在列出文件时无法区分目录和文件。我认为最好的方法是尝试并失败。

try:
    ftp.cwd(name)
except ftplib.error_perm as detail:
    print("It's probably not a directory:", detail)

或者您可能想解析目录列表的输出。然而,这不是平台独立的,因为不同操作系统的目录列表不同。

此处所示...


2

1
使用的Python版本并不重要,nlst仍然非常活跃。只有当FTP服务器支持RFC 3659时,才能使用mlsd;而这对于许多服务器来说并不是情况。 - Brandt

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/']

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 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接