Mit Python können Sie eine Verbindung zu einem FTP -Server herstellen
- 596
- 142
- Madleen Vater
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
Softwareanforderungen und Konventionen verwendet
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 BefehlUS |
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 dasschreiben
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