Python - FTP
FTPo File Transfer Protocol es un protocolo de red conocido que se utiliza para transferir archivos entre computadoras en una red. Se crea en la arquitectura del servidor cliente y se puede utilizar junto con la autenticación de usuario. También se puede utilizar sin autenticación, pero será menos seguro. Conexión FTP que mantiene un directorio de trabajo actual y otras banderas, y cada transferencia requiere una conexión secundaria a través de la cual se transfieren los datos. Los navegadores web más comunes pueden recuperar archivos alojados en servidores FTP.
Los métodos en la clase FTP
En python usamos el módulo ftplib que tiene los métodos requeridos a continuación para enumerar los archivos a medida que los transferiremos.
Método | Descripción |
---|---|
pwd () | Directorio de trabajo actual. |
cwd () | Cambie el directorio de trabajo actual a la ruta. |
dir ([ruta [, ... [, cb]]) | Muestra la lista de directorio de la ruta. Opcional call-back cb pasado a retrlines (). |
storlines (cmd, f) | Carga un archivo de texto usando un cmd FTP dado, por ejemplo, el nombre de archivo STOR. |
storbinary (cmd, f [, bs = 8192]) | Similar a storlines () pero se usa para archivos binarios. |
eliminar (ruta) | Elimina el archivo remoto ubicado en la ruta. |
mkd (directorio) | Crea directorio remoto. |
excepción ftplib.error_temp | Se genera una excepción cuando se recibe un código de error que significa un error temporal (códigos de respuesta en el rango de 400 a 499). |
excepción ftplib.error_perm | Se genera una excepción cuando se recibe un código de error que significa un error permanente (códigos de respuesta en el rango 500–599). |
conectar (host [, puerto [, tiempo de espera]]) | Se conecta al host y al puerto dados. El número de puerto predeterminado es 21, según lo especificado por el protocolo FTP. |
dejar() | Cierra la conexión y se cierra. |
A continuación se muestran los ejemplos de algunos de los métodos anteriores.
Listado de archivos
El siguiente ejemplo utiliza un inicio de sesión anónimo en el servidor ftp y enumera el contenido del directorio actual. Trata a través del nombre de los archivos y directorios y los almacena como una lista. Luego los imprime.
import ftplib
ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")
data = []
ftp.dir(data.append)
ftp.quit()
for line in data:
print "-", line
Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:
- lrwxrwxrwx 1 0 0 1 Nov 13 2012 ftp -> .
- lrwxrwxrwx 1 0 0 3 Nov 13 2012 mirror -> pub
- drwxr-xr-x 23 0 0 4096 Nov 27 2017 pub
- drwxr-sr-x 88 0 450 4096 May 04 19:30 site
- drwxr-xr-x 9 0 0 4096 Jan 23 2014 vol
Cambio de directorio
El siguiente programa usa el método cwd disponible en el módulo ftplib para cambiar el directorio y luego buscar el contenido requerido.
import ftplib
ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")
data = []
ftp.cwd('/pub/') change directory to /pub/
ftp.dir(data.append)
ftp.quit()
for line in data:
print "-", line
Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:
- lrwxrwxrwx 1 504 450 14 Nov 02 2007 FreeBSD -> os/BSD/FreeBSD
- lrwxrwxrwx 1 504 450 20 Nov 02 2007 ImageMagick -> graphics/ImageMagick
- lrwxrwxrwx 1 504 450 13 Nov 02 2007 NetBSD -> os/BSD/NetBSD
- lrwxrwxrwx 1 504 450 14 Nov 02 2007 OpenBSD -> os/BSD/OpenBSD
- -rw-rw-r-- 1 504 450 932 Jan 04 2015 README.nluug
- -rw-r--r-- 1 504 450 2023 May 03 2005 WhereToFindWhat.txt
- drwxr-sr-x 2 0 450 4096 Jan 26 2008 av
- drwxrwsr-x 2 0 450 4096 Aug 12 2004 comp
Obteniendo los archivos
Después de obtener la lista de archivos como se muestra arriba, podemos buscar un archivo específico usando el getfilemétodo. Este método mueve una copia del archivo desde el sistema remoto al sistema local desde donde se inició la conexión ftp.
import ftplib
import sys
def getFile(ftp, filename):
try:
ftp.retrbinary("RETR " + filename ,open(filename, 'wb').write)
except:
print "Error"
ftp = ftplib.FTP("ftp.nluug.nl")
ftp.login("anonymous", "ftplib-example-1")
ftp.cwd('/pub/') change directory to /pub/
getFile(ftp,'README.nluug')
ftp.quit()
Cuando ejecutamos el programa anterior, encontramos que el archivo README.nlug está presente en el sistema local desde donde se inició la conexión.