Mit Python können Sie eine Verbindung zu einem FTP -Server herstellen

Mit Python können Sie eine Verbindung zu einem FTP -Server herstellen

FTP (Dateitransferprotokoll) benötigt keine Präsentationen: Es gehört zu den am häufigsten verwendeten Dateiübertragungsmethoden zwischen einem oder mehreren Clients und einem Server. Durch Design unterstützt es sowohl anonyme Zugriff als auch Authentifizierung, aber in seiner grundlegendsten Form liefert es keine Datenverschlüsselung. Deshalb wird es häufig über TLS gesichert.

Viele FTP -Clientanwendungen sind unter Linux verfügbar, wie zum Beispiel Dateizilla (grafisch) oder LFTP (Befehlszeile). Manchmal möchten wir jedoch programmgesteuert auf einen FTP -Server zugreifen, um Dateitransfers zu planen. Eine einfache Möglichkeit, dies zu tun, besteht darin, eine Programmiersprache wie Python zu verwenden. In diesem Tutorial lernen wir, wie man das benutzt ftplib Bibliothek zur Interaktion mit einem FTP -Server.

In diesem Tutorial lernen Sie:

  • So erstellen Sie eine Instanz der FTPLIB.FTP -Klasse
  • Auflistung von Dateien auf einem Remote -FTP -Server
  • So laden Sie Dateien im Binär- und "Linien" -Modus hoch
  • So herunterladen Sie Dateien im Binär- und "Zeilen" -Modus herunter
  • Erstellen, Löschen und Umbenennen von Verzeichnissen und Dateien
  • Wie man das Arbeitsverzeichnis ändert
Mit Python können Sie eine Verbindung zu einem FTP -Server herstellen

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Verteilung unabhängig
Software Python
Andere Keine weiteren Berechtigungen erforderlich
Konventionen # - Erfordert, dass gegebene Linux -Commands mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mithilfe von verwendet werden können sudo Befehl
US

Die FTPLIB -Bibliothek

Der ftplib Das Modul ist Teil der Python Standard Library und bietet zwei Hauptklassen für abstrakte Arbeiten mit einer FTP -Verbindung: ftblib.Ftp Und ftplib.Ftp_tls. Letzteres ist eine Unterklasse der ersteren und unterstützt Unterstützung für Tls. Lassen Sie uns einige der häufigsten Anwendungsfälle der Bibliothek sehen.

Verbindung zu einem FTP -Server herstellen

Um eine Verbindung zu einem FTP -Server herzustellen, müssen wir zunächst eine Instanz der erstellen Ftp Klasse. Die Klasse unterstützt die mit Anweisung kann damit mit einem Kontextmanager verwendet werden: Auf diese Weise wird die Verbindung automatisch geschlossen, wenn wir das Arbeiten beenden oder ein Fehler auftritt. Hier ist ein Nutzungsbeispiel:

mit ftplib.Ftp ('ftp.irgendwie.com ') als FTP: # Codehere 
Kopieren

Alle Parameter der Ftp Klassenkonstruktor sind optional, aber hier haben wir das erste von ihm akzeptierte Argument vorgelegt Gastgeber Wir wollen eine Verbindung zu einer Verbindung haben. Wenn das Argument vorgelegt ist, die verbinden Die Methode, die zur Herstellung einer Verbindung mit dem Server verwendet wird, wird implizit mit dem angegebenen Host aufgerufen, der als Argument bestanden wurde, andernfalls sollte sie explizit aufgerufen werden:

mit ftplib.Ftp () als ftp: ftp.Connect ('FTP.irgendwie.com ')) 
Kopieren

Das von der akzeptierte zweite Argument Ftp Klassenkonstruktor ist der Benutzer Wir möchten uns wie in den FTP -Server anmelden. Die Bereitstellung dieses Arguments wird das verursachen Anmeldung Methode, die implizit mit dem aufgerufen werden soll Benutzer, Die Passwort Und Acct Werte als Argumente übergeben (sie sind die dritten und vierten Parameter des Klassenkonstruktors und standardmäßig eine leere Zeichenfolge als Wert):

mit ftplib.Ftp ('ftp.irgendwie.IT ',' testuser ',' testPassword ') als FTP: # Codehere 
Kopieren

Wenn das Argument nicht vorgelegt ist, die Anmeldung Die Methode muss explizit genannt werden:

mit ftplib.Ftp ('ftp.irgendwie.es ') als ftp: ftp.Login ('Testuser', 'Passwort') 
Kopieren

Erhalten Sie eine Liste von Dateien auf dem Server

Einmal ein Ftp Das Objekt wird erstellt, wir haben im Grunde drei Möglichkeiten, eine Liste der auf dem FTP -Server gespeicherten Dateien zu erhalten, mit denen wir verbunden sind. Zunächst können wir die verwenden Dir Methode, die eine von der zurückgegebene Verzeichnisliste erzeugt AUFFÜHREN Befehl:

>>> mit ftplib.Ftp ('ftp.irgendwie.IT ',' Benutzer ',' Passwort ') als FTP: ... ftp.Dir () 
Kopieren

Der Dir Die Methode akzeptiert ein optionales Argument, das das Verzeichnis auflistet (der Standard ist das aktuelle Arbeitsverzeichnis, sodass in diesem Fall das FTP -Root). Der obige Code erzeugt eine ähnliche Ausgabe wie folgt:

DRWXR-XR-X 2 FTP FTP 4096 Okt 13 14:37 . DRWXR-XR-X 2 FTP FTP 4096 Okt 13 14: 37… -RW ------- 1 ftp ftp 10 September 10 06:04 .ftpquota -rw-r-r-- 1 ftp ftp 5306756 Okt 18 01:32 Datei.CSV 

Die zweite Methode, mit der wir eine Liste von Dateien erhalten können, ist nlst. Wie der Name schon sagt, sendet diese Methode unter der Motorhaube eine Nlst Befehl an den Server; Es gibt eine Python -Liste zurück, die den Namen der Dateien als Mitglieder enthält:

>>> mit ftplib.Ftp ('ftp.irgendwie.IT ',' Benutzer ',' Passwort ') als FTP: ... ftp.nlst () ... ['.',' ... ',' '.ftpquota ',' Datei.CSV '] 
Kopieren

Die dritte Methode, die wir verwenden können, um den Inhalt eines Verzeichnisses aufzulisten, ist MLSD. Diese Methode verwendet die MLSD Befehl (damit es funktioniert, muss der Server es unterstützen) und akzeptiert zwei optionale Argumente:

  • Der Weg des Verzeichnisses, das aufgeführt werden sollte
  • Eine Liste der Informationen, die wir in das Ergebnis enthalten sein möchten

Die Methode gibt a zurück Generator was ergibt a Zwei-Elemente-Tupel Für jede Datei: Das erste Element jedes Tupels ist das Dateinamen; der zweite a Wörterbuch die angeforderten Informationen und deren Werte enthalten. Lassen Sie uns ein Beispiel sehen:

>>> mit ftplib.Ftp ('ftp.irgendwie.IT ',' Benutzer ',' Passwort ') als FTP: ... Für den Dateinamen Informationen in FTP.MLSD (): ... drucken (Dateiname, Informationen) 
Kopieren

Die Ausgabe des obigen Codes ist Folgendes:

. 'Typ': 'CDIR', 'Sizd': '4096', 'Modify': '20201013123732', 'Unix.Modus ':' 0755 ',' Unix.UID ':' 1809 ',' Unix.gid ':' 1811 ',' einzigartig ':' fd04g58e0a67 '… ' Typ ':' pdir ',' Sizd ':' 4096 ',' modify ':' 20201013123732 ',' Unix.Modus ':' 0755 ',' Unix.UID ':' 1809 ',' Unix.gid ':' 1811 ',' einzigartig ':' fd04g58e0a67 ' .ftpquota 'Typ': 'Datei', 'Größe': '10', 'modify': '20200910040430', 'Unix.Modus ':' 0600 ',' Unix.UID ':' 1809 ',' Unix.gid ':' 1811 ',' einzigartig ':' fd04g58e0a9d ' Datei.CSV 'Typ': 'Datei', 'Größe': '5306756', 'modify': '2020101723245', 'Unix.Modus ':' 0644 ',' Unix.UID ':' 1809 ',' Unix.gid ':' 1811 ',' einzigartig ':' fd04g58e020a ' 

Beachten Sie, dass der Server nicht garantiert die Liste der Informationen respektiert, die wir anfordern.

Abrufen von Dateien vom Server abrufen

Um Dateien vom Server abzurufen, können wir die verwenden Retrberinary oder Retines Methoden. Mal sehen, wie sie funktionieren.

Der Retrberinary Methode ruft eine Dateien im Binärübertragungsmodus ab: Dies ist, was Sie einfach verwenden möchten, um einfach eine Datei vom Server auf Ihren lokalen Computer herunterzuladen und nicht mit seinem Inhalt zu interagieren. Lassen Sie uns ein Beispiel für die Verwendung sehen. Sagen wir, wir wollen die herunterladen Datei.CSV vom Server; Wir würden einfach schreiben:

>>> mit ftplib.Ftp ('ftp.irgendwie.IT ',' Benutzer ',' Passwort ') als FTP: ... mit offen ('Datei.csv ',' wb ') als downloadd_file: ... ftp.RetrBRININAL ('REP -Datei.CSV ', Downloadd_file.schreiben) ... '226-file erfolgreich übertragen \ n226 0.823 Sekunden (hier gemessen), 6.15 mbytes pro Sekunde ' 
Kopieren

Im obigen Beispiel haben wir eine lokale Datei zum Schreiben geöffnet Binärmodus
(Datei.CSV) Verwenden eines Kontextmanagers und dann die genannt Retrberinary Methodenübergang
eine angemessene Retragen Befehl als erstes Argument (Retrag nameofthefile), und das
schreiben Methode des Dateiobjekts heruntergeladene Datei als zweites Argument, was
ist ein Ruf zurück angewendet auf jeden empfangen Datenanteil.

Apropos Datenbrocken, die maximale Blockgröße, die für die Übertragung verwendet wird
von Daten standardmäßig ist 8192 Bytes. Dies kann jedoch über die geändert werden
optionaler dritter Parameter der Retrberinary Methode.

Der Wiederholung Die Methode funktioniert ein wenig anders, da sie Dateien im "Zeilen" -Modus abruft. Das erste Argument dieser Methode kann gültig sein Retragen Befehl, genau wie der, den wir im vorherigen Beispiel verwendet haben, aber auch a AUFFÜHREN (Um eine Liste von Dateinamen und Informationen dazu abzurufen) oder) oder Nlst (Nur Dateinamen abrufen). Das zweite Argument der Methode ist optional und ein Rückruf, der auf jede abgerufene Zeile angewendet wird (Standardverhalten besteht darin, Zeilen zu drucken Stdout). Es ist wichtig zu beachten \N.

Lassen Sie uns ein Beispiel sehen. Wenn wir das verwenden Retines Methode können wir den Inhalt der abrufen Datei.CSV Dateizeile für Zeile:

>>> import OS >>> mit ftplib.FTP ('Host', 'Benutzer', 'Passwort') als FTP: ... mit offen ('Datei.csv ',' w ') als csvfile: ... ftp.Wiederholung ('Retragdatei.CSV ', Lambda X: CSFile.schreiben("".beitreten ([x, os.Linienesep]))) ... 
Kopieren

Im obigen Beispiel haben wir die importiert Betriebssystem Das Modul erstellt dann genau wie zuvor eine Datei lokal, diesmal im Textmodus. Mit dem ftp.Wiederholung Methode haben wir die abgerufen Datei.CSV Remotedateizeile für Zeile. Der Rückruf, den wir als zweites Argument der Wiederholung ist ein Lambda Funktion, die die Zeile als Argument nimmt und die aufruft schreiben Methode der CSVFILE Objekt, die Zeile zu schreiben, die mit dem verbunden ist Linienesep Charakter, das für das Betriebssystem geeignet ist, auf das wir zugegriffen haben Betriebssystem.Linienesep.

Wir können den Rückruf verwenden, um auch den Inhalt der Datei im laufenden Fliegen zu ändern. Stellen Sie sich vor. Wir könnten schreiben:

[...] ... ftp.Wiederholung ('Retragdatei.CSV ', Lambda X: CSFile.schreiben("".beitreten ([x.ober (), os.Linienesep]))) 
Kopieren

Diese Methode kann, wie bereits erwähnt, verwendet werden, um auch mit den von der zurückgegebenen Linien zu arbeiten AUFFÜHREN oder Nlst Befehle. Nehmen wir an, wir möchten das Ergebnis des Auflisten eines Verzeichnisses auf dem Remote -Server in einer lokalen Datei speichern:

>>> mit ftplib.FTP ('Host', 'Benutzer', 'Passwort') als FTP: ... mit open ('list_result', 'w') als Lokalfile: ... ftp.Wiederholung ('Liste', Lambda X: Localfile.schreiben("".beitreten ([x, os.Linienesep]))) 
Kopieren

Die lokale Datei LIST_RESULT wird erstellen (oder verkürzt und überschrieben, wenn es bereits existiert), und sein Inhalt wird ähnlich sein wie bei:

DRWXR-XR-X 2 FTP FTP 4096 Okt 13 14:37 . DRWXR-XR-X 2 FTP FTP 4096 Okt 13 14: 37… -RW ------- 1 ftp ftp 10 September 10 06:04 .ftpquota -rw-r-r-- 1 ftp ftp 5306756 Okt 18 01:32 Datei.CSV 

Hochladen von Dateien auf den Server

Wenn wir eine Datei auf einen FTP -Server hochladen müssen, können wir sie auch im Binär- oder „Zeilen“ -Modus tun. Die beiden Methoden, mit denen wir die Aufgabe erfüllen können, sind jeweils: Lagerbehebung Und Lagereline.

Der Lagerbehebung Methode der Ftp Die Klasse nimmt zwei obligatorische Argumente ein, die gültig sind Stor Befehl und das aus einer im Binärmodus eröffnete lokale Datei erstellt. Angenommen, wir möchten eine Datei hochladen. Wir würden schreiben:

>>> mit ftplib.FTP ('Host', 'Benutzer', 'Passwort') als FTP: ... mit Open ('Linuxconfig.txt ',' rb ') als File_Object: ... ftp.StorBinary ('Stor Linuxconfig.txt ', Datei_Object) 
Kopieren

Wirklich einfach! Natürlich können wir die Datei auf dem Server auch mit einem anderen Namen speichern. Das Dateiobjekt als zweites Argument der lagerberechtig Methode wird bis zum EOF gelesen. Genau wie im Fall der Retrberinary Die Methode ist möglich, die Datenanteilsgröße mit dem optionalen dritten Argument zu ändern (der Standard ist erneut 8192 Bytes). Das vierte Argument, das von der akzeptiert wird lagerberechtig Methode ist optional Ruf zurück Funktion, die auf jeden Datenanteil angewendet wird.

Um eine Dateizeile nach Zeile hochzuladen, können wir die verwenden Lagsleitungen Methode stattdessen. In diesem Fall wird die Datei, die wir hochladen möchten. Die ersten beiden Argumente sind die gleichen von der akzeptiert lagerberechtig Methode, während der dritte (und letzt) ​​a ist Ruf zurück Das wird auf jede Zeile angewendet.

Navigieren, Erstellen von Verzeichnissen, Löschen und Umbenennen von Dateien

Der Ftp Klasse (und die Ftp_tls Die Klasse, die es erweitert) liefert auch einige sehr nützliche Methoden, um einige der häufigsten Operationen auszuführen. Um beispielsweise ein Verzeichnis auf dem Remote -FTP -Server zu erstellen, können wir die verwenden Mkd Methode, die den Pfadnamen des Verzeichnisses nimmt, um als alleiniges Argument zu erstellen:

>>> ftp.MKD ('Newdir') 'Newdir' ' 
Kopieren

Um das Arbeitsverzeichnis zu ändern, können wir das verwenden CWD Methode, die den Namen des Verzeichnisses übergeben, in das wir als Argument einziehen möchten:

>>> ftp.CWD ('Newdir') '250 OK. Das aktuelle Verzeichnis ist /Newdir ' 
Kopieren

Um ein vorhandenes Verzeichnis zu löschen, können wir die verwenden RMD Methode, übergeben Sie den Namen des zu entfernenden Verzeichnisses:

>>> ftp.RMD ('Newdir') '250 Das Verzeichnis wurde erfolgreich entfernt' 
Kopieren

Zum Löschen einer regulären Datei können wir die verwenden löschen Methode stattdessen den Namen der Datei übergeben, die als Argument gelöscht werden soll:

>>> ftp.Datei löschen.CSV ')' 250 gelöschte Datei.CSV ' 
Kopieren

Um Dateien oder Verzeichnisse umzubenennen, können wir die verwenden umbenennen Methode. Es akzeptiert zwei Argumente: Der erste ist der aktuelle Name der Datei oder des Verzeichnisses, der zweite ist der neue. Umbenennen Datei.CSV Zu Datei0.CSV, Zum Beispiel würden wir schreiben:

>>> ftp.Datei umbenennen.CSV ',' Datei0.CSV ')' 250 Datei erfolgreich umbenannt oder verschoben ' 
Kopieren

Eine Verbindung manuell schließen

Wie wir bereits gelernt haben, die Ftp Die Klasse kann mit einem Kontextmanager verwendet werden, so dass die Verbindung automatisch geschlossen wird, wenn der Interpreter das verlässt mit Anweisung Block. In Fällen, in denen wir die Verbindung manuell schließen müssen, müssen wir jedoch die verwenden aufhören Methode: Es ruft die auf schließen Methode intern und sendet a AUFHÖREN Befehl an den Server, um die Verbindung anmutig zu schließen.

Schlussfolgerungen

In diesem Artikel haben wir gelernt, wie man den Python benutzt ftplib Modul, um eine Verbindung zu einem FTP -Server herzustellen und mit ihm zu interagieren. Wir haben gesehen, wie man eine Instanz der erstellt Ftp Klasse und mit welchen Methoden können wir den Inhalt eines Remote -Verzeichnisses auflisten und Dateien hochladen/herunterladen/herunterladen/herunterladen/herunterladen. Wir haben auch gesehen. In diesem Tutorial haben wir die häufigsten Anwendungsfälle untersucht, um eine vollständige Feature -Liste zu erhalten.

Verwandte Linux -Tutorials:

  • LFTP -Tutorial unter Linux mit Beispielen
  • FTP -Clientliste und -installation auf Ubuntu 20.04 Linux…
  • FTP -Clientliste und -installation auf Ubuntu 22.04 Linux…
  • So richten Sie einen OpenVPN -Server auf Ubuntu 20 ein.04
  • Ubuntu 20.04: Liste der Torrent -Clients
  • Ubuntu 22.04: Liste der Torrent -Clients
  • Setup FTP Server unter Linux einrichten
  • Dinge zu installieren auf Ubuntu 20.04
  • So richten Sie VSFTPD auf Debian ein
  • So richten Sie FTP/SFTP -Server und Client auf Almalinux ein