Python: Aceder a un servidor FTP

Forma fácil de acceder a un servidor FTP.

Para hacer la pruebas, usaremos el servidor dlptest.com este nos permita probar el programa que realicemos. Hay que tener en cuenta,:

  • No sirve para almacenar datos, ya que se borran cada cierto tiempo.
  • No se pueden subir ni descargar archivos muy grandes, ya que no puede banear nuestra IP.
  • La contraseña varia cada cierto tiempo
  • Recomendable leer las condiciones de uso, ya que pueden variar.

Desarrollo del programa:

Utilizaremos el modelo ftplib

Utilizaremos el fichero «ejemplo.txt» para poder hacer las operaciones, este fichero debe estar en el mismo directorio donde se ejecute el programa.

Definir los parámetros de acceso.

HOSTNAME = "ftp.dlptest.com"
USERNAME = "dlpuser"
PASSWORD = "rNrKYTX9g7z3RgJRmxWuGHbeu"

Nos conectamos al servidor:

ftp_server = ftplib.FTP(HOSTNAME, USERNAME, PASSWORD)

En las siguientes subrutinas, definiremos los comandos mas importantes.

Subir un fichero (Upload):

def subir_fichero():
    filename = "ejemplo.txt"
    # Leemos el fichero en modo binario
    with open(filename, "rb") as file:
        # Comando para UPloading el fichero "STOR filename"
        ftp_server.storbinary(f"STOR {filename}", file)

Bajar un fichero (Download):

def descargar_fichero():
    filename = "ejemplo.txt"
    # Escribimos el fichero en modo binario
    with open(filename, "wb") as file:
        # Comand para Downloading el fichero "RETR filename"
        ftp_server.retrbinary(f"RETR {filename}", file.write)

Crear un directorio:

def crear_directorio(directorio):
    try:
        ftp_server.mkd(directorio)
        print(f"Directorio '{directorio}' creado exitosamente.")
        ftp_server.quit()
    except ftplib.all_errors as e: 
      print(f"Error al crear el directorio: {e}")

Comprobar si existe un directorio:

def comprobar_directorio(directorio):
    """
     Comprueba si un directorio existe en un servidor FTP.
    Argumentos:
        ftp: Objeto FTP conectado al servidor.
        directorio: Nombre del directorio a comprobar.
    Avisos:
        True si el directorio existe
        ,False en caso contrario.
    """
    try:
        # Intenta cambiar al directorio
        ftp_server.cwd(directorio)
        # Si se pudo cambiar, vuelve al directorio anterior
        ftp_server.cwd('..')
        return True
    except ftplib.error_perm:
        # Si lanza error_perm, el directorio no existe
        return False

Progama completo:

# -*- coding: utf-8 -*-
"""
Created on Thu Jul 17 14:06:51 2025

@author: EA7TB
"""
# Import Module
import ftplib

# Fill Required Information
HOSTNAME = "ftp.dlptest.com"
USERNAME = "dlpuser"
PASSWORD = "rNrKYTX9g7z3RgJRmxWuGHbeu"

# Connect FTP Server
ftp_server = ftplib.FTP(HOSTNAME, USERNAME, PASSWORD)

# force UTF-8 encoding
ftp_server.encoding = "utf-8"

def listado():
    # Get list of files
    ftp_server.dir()


#Subir un fichero
def subir_fichero():
    filename = "ejemplo.txt"
    # Leemos el fichero en modo binario
    with open(filename, "rb") as file:
        # Comando para UPloading el fichero "STOR filename"
        ftp_server.storbinary(f"STOR {filename}", file)
        
def descargar_fichero():
    filename = "ejemplo.txt"
    # Escribimos el fichero en modo binario
    with open(filename, "wb") as file:
        # Comand para Downloading el fichero "RETR filename"
        ftp_server.retrbinary(f"RETR {filename}", file.write)
    
def crear_directorio():
    try:
        directorio = "ejemplo"
        ftp_server.mkd(directorio)
        print(f"Directorio '{directorio}' creado exitosamente.")
        ftp_server.quit()
    except ftplib.all_errors as e: 
      print(f"Error al crear el directorio: {e}")


def comprobar_directorio(directorio):
    """
     Comprueba si un directorio existe en un servidor FTP.
    Argumentos:
        ftp: Objeto FTP conectado al servidor.
        directorio: Nombre del directorio a comprobar.
    Avisos:
        True si el directorio existe
        ,False en caso contrario.
    """
    try:
        # Intenta cambiar al directorio
        ftp_server.cwd(directorio)
        # Si se pudo cambiar, vuelve al directorio anterior
        ftp_server.cwd('..')
        return True
    except ftplib.error_perm:
        # Si lanza error_perm, el directorio no existe
        return False


subir_fichero()
listado()
descargar_fichero()
print(comprobar_directorio("ejemplo"))
crear_directorio("ejemplo")
ftp_server.close()

Existen mas comandos, se pueden ver en la documentación de Python