Herramientas de usuario

Herramientas del sitio


informatica:programacion:python:ftp

Python: FTP

En todas las notas se utiliza el módulo ftplib

Login

Iniciar sesión en un servidor FTP.

# Cogemos solo el objeto 'FTP' del módulo ftplib
from ftplib import FTP
 
ftp = FTP("servidor.ftp")
 
ftp.login("usuario", "contraseña")
 
# Cerramos la conexión
ftp.close()

Si el servidor FTP permite acceso anónimo, no tendríamos que poner ningún argumento en el método login(), es decir: ftp.login()

Listar ficheros

El método nlst() devuelve una lista con los ficheros y directorios del servidor FTP.

ftp.nlst()
 
# Resultado:
# ['.', '..', 'directorio', 'archivo.txt']
 
# Podemes especificar el directorio que queremos listar:
ftp.nlst("directorio")

Para movernos por directorios, utilizamos el método cwd():

ftp.cwd("directorio")

Descargar ficheros

Descarga de un fichero:

from ftplib import FTP
import os
 
ftp.cwd("directorio")
 
# Directorio local donde se descargará el fichero
os.chdir("/home/usuario/datos")
 
with open("archivo.txt", "wb") as file:
    ftp.retrbinary("RETR archivo.txt", file.write)

Ejemplos

Descarga de un fichero:

from ftplib import FTP
import os
 
def ftpDownloader(archivo, host, user, password):
    ftp = FTP(host)
    ftp.login(user, password)
    ftp.cwd("datos")
    os.chdir("/home/usuario/datos")
    with open(archivo, "wb") as file:
        ftp.retrbinary("RETR %s" % archivo, file.write)

Descarga de varios ficheros:

from ftplib import FTP, error_perm
import os
 
# La siguiente función descargará todo lo que hay dentro de directorio
# 'Data' que sigue el siguiente formato 'año/id/id-año.gz'
 
def ftpDownloader(id, startYear, endYear, url, user, password):
    ftp = FTP(url)        
    ftp.login(user,password)
    if not os.path.exists("/home/usuario/directorio"):           
        os.makedirs("/home/usuario/directorio")
    os.chdir("/home/usuario/directorio")
    for year in range(startYear, endYear+1):
        fullpath='/Data/%s/%s-%s.gz' % (year, id, year)    
        filename = os.path.basename(fullpath)
        try:
            with open(filename,"wb") as file:
                ftp.retrbinary('RETR %s' % fullpath, file.write)
            print("%s succesfully downloaded" % filename)
        except error_perm: 
            print("%s is not available" % filename)
            os.remove(filename)    
    ftp.close()
informatica/programacion/python/ftp.txt · Última modificación: por tempwin