example ejemplo descargar archivos python ftplib

ejemplo - Cómo descargar un archivo a través de FTP con Python ftplib



python ftp rename example (5)

El módulo ftplib en la biblioteca estándar de Python se puede comparar con el ensamblador. Use una biblioteca de alto nivel como: https://pypi.python.org/pypi/ftputil

Tengo el siguiente código que se conecta fácilmente al servidor FTP y abre un archivo zip. Quiero descargar ese archivo en el sistema local. ¿Como hacer eso?

# Open the file for writing in binary mode print ''Opening local file '' + filename file = open(filename, ''wb'') # Download the file a chunk at a time # Each chunk is sent to handleDownload # We append the chunk to the file and then print a ''.'' for progress # RETR is an FTP command print ''Getting '' + filename ftp.retrbinary(''RETR '' + filename, handleDownload) # Clean up time print ''Closing file '' + filename file.close()


Este es un código de Python que funciona bien para mí. Los comentarios están en español, pero la aplicación es fácil de entender

# coding=utf-8 from ftplib import FTP # Importamos la libreria ftplib desde FTP import sys def imprimirMensaje(): # Definimos la funcion para Imprimir el mensaje de bienvenida print "------------------------------------------------------" print "-- COMMAND LINE EXAMPLE --" print "------------------------------------------------------" print "" print ">>> Cliente FTP en Python " print "" print ">>> python <appname>.py <host> <port> <user> <pass> " print "------------------------------------------------------" def f(s): # Funcion para imprimir por pantalla los datos print s def download(j): # Funcion para descargarnos el fichero que indiquemos según numero print "Descargando=>",files[j] fhandle = open(files[j], ''wb'') ftp.retrbinary(''RETR '' + files[j], fhandle.write) # Imprimimos por pantalla lo que estamos descargando #fhandle.close() fhandle.close() ip = sys.argv[1] # Recogemos la IP desde la linea de comandos sys.argv[1] puerto = sys.argv[2] # Recogemos el PUERTO desde la linea de comandos sys.argv[2] usuario = sys.argv[3] # Recogemos el USUARIO desde la linea de comandos sys.argv[3] password = sys.argv[4] # Recogemos el PASSWORD desde la linea de comandos sys.argv[4] ftp = FTP(ip) # Creamos un objeto realizando una instancia de FTP pasandole la IP ftp.login(usuario,password) # Asignamos al objeto ftp el usuario y la contraseña files = ftp.nlst() # Ponemos en una lista los directorios obtenidos del FTP for i,v in enumerate(files,1): # Imprimimos por pantalla el listado de directorios enumerados print i,"->",v print "" i = int(raw_input("Pon un Nº para descargar el archivo or pulsa 0 para descargarlos/n")) # Introducimos algun numero para descargar el fichero que queramos. Lo convertimos en integer if i==0: # Si elegimos el valor 0 nos decargamos todos los ficheros del directorio for j in range(len(files)): # Hacemos un for para la lista files y download(j) # llamamos a la funcion download para descargar los ficheros if i>0 and i<=len(files): # Si elegimos unicamente un numero para descargarnos el elemento nos lo descargamos. Comprobamos que sea mayor de 0 y menor que la longitud de files download(i-1) # Nos descargamos i-1 por el tema que que los arrays empiezan por 0


A = filename ftp = ftplib.FTP("IP") ftp.login("USR Name", "Pass") ftp.cwd("/Dir") try: ftp.retrbinary("RETR " + filename ,open(i, ''wb'').write) except: print "Error"


FILENAME = ''StarWars.avi'' with ftplib.FTP(FTP_IP, FTP_LOGIN, FTP_PASSWD) as ftp: ftp.cwd(''movies'') with open(FILENAME, ''wb'') as f: ftp.retrbinary(''RETR '' + FILENAME, f.write)

Por supuesto, seríamos prudentes para manejar posibles errores.


ftp.retrbinary(''RETR %s'' % filename, file.write)