Другой способ - предположить, что все является каталогом, и попытаться изменить его. Если это удастся, это каталог, но если он выбрасывает ftplib.error_perm, это, вероятно, файл. Вы можете поймать, а затем поймать исключение. Конечно, это не самый безопасный способ, но он также не разбирает сумасшедшую строку за ведущие слова.
Пример
def processRecursive(ftp,directory):
ftp.cwd(directory)
#put whatever you want to do in each directory here
#when you have called processRecursive with a file,
#the command above will fail and you will return
#get the files and directories contained in the current directory
filenames = []
ftp.retrlines('NLST',filenames.append)
for name in filenames:
try:
processRecursive(ftp,name)
except ftplib.error_perm:
#put whatever you want to do with files here
#put whatever you want to do after processing the files
#and sub-directories of a directory here