code: def _rm_recursive(self, ftp, path):
          
          wd = ftp.pwd()
  
          # check if it is a file first, because some FTP servers don't return
          # correctly on ftp.nlst(file)
          try:
              ftp.cwd(path)
          except ftplib.all_errors:
              # this is a file, we will just delete the file
              ftp.delete(path)
              return
  
          try:
              names = ftp.nlst()
          except ftplib.all_errors:
              # some FTP servers complain when you try and list non-existent paths
              return
  
          for name in names:
              if os.path.split(name)[1] in ('.', '..'):
                  continue
  
              try:
                  ftp.cwd(name)   # if we can cwd to it, it's a folder
                  ftp.cwd(wd)   # don't try a nuke a folder we're in
                  ftp.cwd(path)  # then go back to where we were
                  self._rm_recursive(ftp, name)
              except ftplib.all_errors:
                  ftp.delete(name)
  
          try:
              ftp.cwd(wd)  # do not delete the folder that we are in
              ftp.rmd(path)
          except ftplib.all_errors as e:
              print('_rm_recursive: Could not remove {0}: {1}'.format(path, e))
docs: Recursively delete a directory tree on a remote server.
  
          Source: https://gist.github.com/artlogic/2632647