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.