Python ftp list only directories and not files

yossi picture yossi · May 29, 2011 · Viewed 9.9k times · Source

I would like to list all directories on a ftp directory and then enter each of them. The problem is that my code also list file and try to enter them as well.

  1. Is there a way to get a return value from the method ftp.cwd ?
  2. Is there a way to get only directory name in the first place, or there is a better way to do what I want.

Here is the code I am using now:

    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('../')

Answer

Uku Loskit picture Uku Loskit · May 29, 2011

The FTP protocol doesn't have a way of distinguishing between directories and files (as for listing). I think the best bet would be either, try and fail

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

Or otherwise you may want to parse the output from the directory listing. This will not be platform independent though, because directory listings differ from OS to OS. As shown here...