Search code examples
pythonlistftpdirectorycwd

Python ftp list only directories and not files


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

Solution

  • 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...