Python - FTP

FTPou File Transfer Protocol est un protocole réseau bien connu utilisé pour transférer des fichiers entre les ordinateurs d'un réseau. Il est créé sur une architecture client-serveur et peut être utilisé avec l'authentification utilisateur. Il peut également être utilisé sans authentification mais ce sera moins sécurisé. Connexion FTP qui maintient un répertoire de travail actuel et d'autres indicateurs, et chaque transfert nécessite une connexion secondaire à travers laquelle les données sont transférées. La plupart des navigateurs Web courants peuvent récupérer des fichiers hébergés sur des serveurs FTP.

Les méthodes de la classe FTP

En python, nous utilisons le module ftplib qui a les méthodes requises ci-dessous pour lister les fichiers lorsque nous transférerons les fichiers.

Méthode La description
pwd () Répertoire de travail actuel.
cwd () Remplacez le répertoire de travail actuel par chemin.
dir ([chemin [, ... [, cb]]) Affiche la liste du répertoire du chemin. Cb de rappel facultatif passé à retrlines ().
lignes de stockage (cmd, f) Télécharge le fichier texte en utilisant une cmd FTP donnée - par exemple, le nom de fichier STOR.
storbinary (cmd, f [, bs = 8192]) Similaire à storlines () mais est utilisé pour les fichiers binaires.
supprimer (chemin) Supprime le fichier distant situé au chemin.
mkd (répertoire) Crée un répertoire distant.
exception ftplib.error_temp Exception levée lorsqu'un code d'erreur indiquant une erreur temporaire (codes de réponse compris entre 400 et 499) est reçu.
exception ftplib.error_perm Exception déclenchée lorsqu'un code d'erreur signifiant une erreur permanente (codes de réponse compris entre 500 et 599) est reçu.
connect (hôte [, port [, délai d'attente]]) Se connecte à l'hôte et au port donnés. Le numéro de port par défaut est 21, comme spécifié par le protocole FTP.
quitter() Ferme la connexion et se ferme.

Vous trouverez ci-dessous des exemples de certaines des méthodes ci-dessus.

Liste des fichiers

L'exemple ci-dessous utilise une connexion anonyme au serveur ftp et répertorie le contenu du répertoire actuel. Il traite le nom des fichiers et des répertoires et les stocke sous forme de liste. Puis les 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

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

- 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

Changer le répertoire

Le programme ci-dessous utilise la méthode cwd disponible dans le module ftplib pour changer de répertoire puis récupérer le contenu requis.

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

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

- 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

Récupération des fichiers

Après avoir obtenu la liste des fichiers comme indiqué ci-dessus, nous pouvons récupérer un fichier spécifique en utilisant le getfileméthode. Cette méthode déplace une copie du fichier du système distant vers le système local à partir duquel la connexion ftp a été initiée.

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()

Lorsque nous exécutons le programme ci-dessus, nous trouvons que le fichier README.nlug est présent dans le système local à partir duquel la connexion a été initiée.