Como funciona la libreria ftplib

Muchas empresas y organizaciones utilizan el Protocolo de transferencia de archivos (FTP) para compartir datos. Python proporciona el módulo FileTransferProtocol en la biblioteca estándar. ftplib Un cliente que implementa el protocolo FTP. Puede aprender todo sobre los protocolos de transferencia de archivos leyendo RFC959 en Internet.

Recomendado: ¿ Por que usar python para machine learning ?

Sin embargo, la especificación completa está más allá del alcance de este artículo. En su lugar, concéntrese en los siguientes temas:

  • Conectarse a un servidor FTP
  • Explora su estructura
  • Descargar archivos desde un servidor FTP
  • Subir archivos al servidor FTP

¡Empecemos!

Conectarse a un servidor FTP

Lo primero que debe hacer es encontrar un servidor FTP para conectarse. Puedes usar muchas cosas gratis. Por ejemplo, la mayoría de las distribuciones de Linux tienen espejos FTP disponibles públicamente. Cuando visita el sitio web de Fedora (https://admin.fedoraproject.org/mirrormanager/) tiene una larga lista de réplicas disponibles. Sin embargo, no se trata solo de FTP, así que asegúrese de elegir el protocolo correcto. De lo contrario, obtendrá un error de conexión.

En este ejemplo, ftp.cse.buffalo.edu.. la documentación oficial de Python es ftp.debian.orgNo dudes en probar. Ahora vamos a conectarnos al servidor. Abra un intérprete de Python en una terminal o use IDLE para realizar los siguientes pasos:

>>> from ftplib import FTP
>>> ftp = FTP('ftp.cse.buffalo.edu')
>>> ftp.login()
'230 Guest login ok, access restrictions apply.'

Vamos a desglosarlo. Aquí importe la clase FTP desde ftplib. Luego cree una instancia de la clase que pasa el host para conectarse. Python espera una conexión anónima porque no pasa el nombre de usuario ni la contraseña. Si necesita conectarse a un servidor FTP utilizando un puerto no estándar, enlazar método. métodos como se muestra a continuación.

>>> from ftplib import FTP
>>> ftp = FTP()
>>> HOST = 'ftp.cse.buffalo.edu'
>>> PORT = 12345
>>> ftp.connect(HOST, PORT)

Este código falla porque el puerto 12345 no está abierto en el servidor FTP en este ejemplo. Sin embargo, el objetivo es decirle cómo conectarse a un puerto diferente al predeterminado.

Si el servidor FTP al que se está conectando requiere seguridad TLS, FTP_TLS clase en lugar de FTP clase.esto FTP_TLS Esta clase admite archivos de claves y archivos de certificados. Si desea proteger su conexión, debe llamar prot_p Por aquí.

Explorar directorios con ftplib

¡Compruebe el contenido del servidor FTP y aprenda a cambiar de directorio! Aquí hay un código que muestra una forma común de hacer esto:

>>> from ftplib import FTP
>>> ftp = FTP()
>>> ftp.login()
>>> ftp.retrlines('LIST')   
total 28
drwxrwxrwx   2 0       0     4096 Sep  6  2015 .snapshot
drwxr-xr-x   2 202019  5564  4096 Sep  6  2015 CSE421
drwxr-xr-x   2 0       0     4096 Jul 23  2008 bin
drwxr-xr-x   2 0       0     4096 Mar 15  2007 etc
drwxr-xr-x   6 89987   546   4096 Sep  6  2015 mirror
drwxrwxr-x   7 6980    546   4096 Jul  3  2014 pub
drwxr-xr-x  26 0       11    4096 Apr 29 20:31 users
'226 Transfer complete.'
>>> ftp.cwd('mirror')
'250 CWD command successful.'
>>> ftp.retrlines('LIST')   
total 16
drwxr-xr-x  3 89987  546  4096 Sep  6  2015 BSD
drwxr-xr-x  5 89987  546  4096 Sep  6  2015 Linux
drwxr-xr-x  4 89987  546  4096 Sep  6  2015 Network
drwxr-xr-x  4 89987  546  4096 Sep  6  2015 X11
'226 Transfer complete.'

Inicie sesión ahora y envíe el comando LIST al servidor FTP. Esto se hace llamando al objeto ftp. línea de regresión método.este línea de regresión Este método imprime el resultado del comando que llamó. En este ejemplo, llamamos a LIST para obtener una lista de archivos y carpetas y su información respectiva y generarlos. Próximo, CWD Ejecute el comando para cambiar el directorio de trabajo a otra carpeta, luego vuelva a emitir el comando LIST para ver el contenido. También puede usar el objeto ftp contenido Función para obtener la lista de carpetas actuales.

Subir archivos a través de FTP

Simplemente ver contenido en el servidor FTP no es muy conveniente. En la mayoría de los casos, deberá descargar el archivo del servidor. Encuentre una manera de descargar un solo archivo:

>>> from ftplib import FTP
>>> ftp = FTP('ftp.debian.org')
>>> ftp.login()
'230 Login successful.'
>>> ftp.cwd('debian')  
'250 Directory successfully changed.'
>>> out="/home/mike/Desktop/README"
>>> with open(out, 'wb') as f:
...     ftp.retrbinary('RETR ' + 'README.html', f.write)

En este ejemplo, conéctese al FTP de Debian Linux y navegue a la carpeta debian. Luego cree un nombre para el archivo que desea guardar y ábralo en modo binario de escritura.Finalmente, use el objeto ftp Tríada Llame a RETR para obtener el archivo y escribirlo en el disco local. Si desea descargar todos los archivos, debe crear una lista de archivos.

import ftplib
import os

ftp = ftplib.FTP('ftp.debian.org')
ftp.login()
ftp.cwd('debian')
filenames = ftp.nlst()

for filename in filenames:
    host_file = os.path.join(
        '/home/mike/Desktop/ftp_test', filename)
    try:
        with open(host_file, 'wb') as local_file:
            ftp.retrbinary('RETR ' + filename, local_file.write)
    except ftplib.error_perm:
        pass

ftp.quit()

Este ejemplo es muy similar al anterior. Sin embargo, deberá modificarlo para que coincida con su ubicación de descarga preferida. Tenga en cuenta que el código en la primera parte es casi el mismo, pero luego llamamos nlst Esto mostrará una lista de nombres de archivos y directorios. Puede especificar directorios para enumerarlos o llamarlos sin enumerarlos. Suponga que desea una lista del directorio actual. Tenga en cuenta que el comando nlst no le dice cómo distinguir entre archivos y directorios en los resultados. Sin embargo, en este ejemplo, no me importa. Es como un script de fuerza bruta. Entonces itera sobre la lista devuelta e intenta descargarla. Si «archivo» es en realidad un directorio, creará un archivo vacío en el disco local con el mismo nombre que el directorio en el servidor FTP.

Los comandos MLSD se pueden invocar de las siguientes maneras MLSD Aunque es un método, no todos los servidores FTP admiten este comando. Si es así, es posible que pueda notar la diferencia entre los dos.

Subir archivos al servidor FTP

Otra tarea importante en un servidor FTP es cargar archivos al servidor FTP. Python también puede manejar esto. En realidad, hay dos métodos que puede usar para descargar archivos.

  • storlines – para descargar archivos de texto (TXT, HTML, RST)
  • storbinary – para descargar archivos binarios (PDF, XLS, etc.)

Veamos un ejemplo de cómo hacerlo.

import ftplib

def ftp_upload(ftp_obj, path, ftype="TXT"):
    """
    A function for uploading files to an FTP server
    @param ftp_obj: The file transfer protocol object
    @param path: The path to the file to upload
    """
    if ftype == 'TXT':
        with open(path) as fobj:
            ftp.storlines('STOR ' + path, fobj)
    else:
        with open(path, 'rb') as fobj:
            ftp.storbinary('STOR ' + path, fobj, 1024)

if __name__ == '__main__':
    ftp = ftplib.FTP('host, 'username', 'password')
    ftp.login()

    path="/path/to/something.txt"
    ftp_upload(ftp, path)

    pdf_path="/path/to/something.pdf"
    ftp_upload(ftp, pdf_path, ftype="PDF")

    ftp.quit()

En este ejemplo, crearemos una función para cargar un archivo. Obtiene un objeto ftp, la ruta al archivo que se va a cargar y el tipo de archivo. Luego, solo verifique el tipo de archivo para ver si necesita usar texto Devolver a Astrolabio para el proceso de descarga.

Recomendado: frameworks python

Finalmente, la declaración condicional inferior se conecta al servidor FTP, inicia sesión y descarga archivos de texto y PDF. Una extensión simple para agregar a esto es la lógica para moverse a un directorio específico después de iniciar sesión. Tal vez simplemente cargar el archivo en la ubicación raíz no sea suficiente.

Palabras finales

En este punto, debe tener suficiente conocimiento para comenzar a usar ftplib de Python. Hay muchos otros métodos que vale la pena buscar en la documentación del módulo de Python. Pero ahora conoce los conceptos básicos de enumerar directorios, navegar por estructuras de carpetas y cargar y descargar archivos.

¿ Te fue útil este artículo ?
⬇️ Ayudame compartiendo para poder llegar a más personas.⬇️

3 comentarios en «Como funciona la libreria ftplib»

  1. ¿Realmente es seguro subir archivos a un servidor FTP? ¿Y la privacidad? 🤔

  2. ¿Por qué no explorar también la seguridad al conectar y subir archivos por FTP?

  3. ¿Realmente es necesario subir archivos al servidor FTP en la actualidad? ¡Debate interesante!

Los comentarios están cerrados.