ftplib : le module Python qui permet de gérer une connexion FTP

Et oui... À mon grand étonnement, beaucoup de monde utilise encore le FTP. J'ai récemment du travailler sur un script chargé d'automatiser la récupération de fichiers sur un serveur FTP. Cette article présente donc une façon de faire (parmi tant d'autres) en Python.

Les prérequis

Importer le module FTP :

#!/usr/bin/python3


from ftplib import FTP

Se connecter

host="ftp.mikael-flora.fr"
user="ftpmikael"
password="ftpmikael"


with FTP(host,user,password) as session:
    # your processing
    session.quit()                        # polite way to close a connection
    # session.close()                     # close the connection unilaterally (force disconnection)

Toute les actions qui vont suivre se font lorsque la session est établi (donc avant 'session.quit()').

Les actions courantes

Lister le contenu du répertoire courant

Utile pour les premiers tests !

session.dir()

Récupérer un fichier

session.retrbinary("RETR remoteFile.txt", open("localFile.txt",'wb').write)

Envoyer un fichier

session.storbinary("STOR remoteFile.txt", open("localFile.txt",'rb'))

Supprimer un fichier

session.delete("remoteFile.txt")

Créer un répertoire

session.mkd('myRep')

Supprimer un répertoire vide

session.rmd('myRep')

"Gérer" les erreurs

try:
    # your FTP processing
except Exception as e:
    print("your error: "+str(e))

Voici quelques exemples de messages d'erreur possible :

Message d'erreur description
[Errno -2] Name or service not known problème de résolution de nom
530 Login incorrect. identifiant de connexion au service FTP incorrecte (login et/ou password)
550 Failed to open file. ne peux lire le fichier sur le serveur FTP
553 Could not create file. ne peux pas créer un fichier sur le serveur FTP

Un snippet pour terminer

Mon petit bout de code permettant de télécharger un fichier :

#!/usr/bin/python3


import sys
from ftplib import FTP


host="ftp.mikael-flora.fr"
user="ftpmikael"
password="ftpmikael"

rfile="test.txt"              # remote file to download
lfile=rfile                   # local file name


# download file
try:
    with FTP(host,user,password) as session:
        session.retrbinary("RETR "+rfile, open(lfile,'wb').write)
        session.quit()
except Exception as e:
    print("Fucking error: "+str(e))
    sys.exit(1)
By @Mikael FLORA in
Tags : #script, #réseau,