ejemplo descargar archivos python list ftp directory cwd

descargar - Python ftp lista solo directorios y no archivos



ftplib (4)

Me gustaría enumerar todos los directorios en un directorio ftp y luego ingresar cada uno de ellos. El problema es que mi código también incluye un archivo e intenta ingresarlos también.

  1. ¿Hay alguna forma de obtener un valor de retorno del método ftp.cwd?
  2. ¿Hay alguna manera de obtener solo el nombre del directorio, o hay una forma mejor de hacer lo que quiero?

Aquí está el código que estoy usando ahora:

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


Esto es un poco feo, pero el ftplib parece no ser muy fácil de usar.

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


Eso funcionó para mí:

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



El protocolo FTP no tiene una forma de distinguir entre directorios y archivos (como para el listado). Creo que la mejor opción sería intentar y fallar

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

De lo contrario, es posible que desee analizar el resultado de la lista del directorio. Sin embargo, esto no será independiente de la plataforma, porque las listas de directorios difieren de OS a OS. Como se muestra aquí ...