Jak połączyć się z serwerem FTP za pomocą Pythona
- 1858
- 568
- Maurycy Napierała
FTP (protokół transferu plików) nie wymaga prezentacji: jest to jedna z najczęściej używanych metod transferu plików między jednym lub większą liczbą klientów a serwerem. Według projektu obsługuje zarówno anonimowy dostęp, jak i uwierzytelnianie, ale w najbardziej podstawowej formie nie zapewnia szyfrowania danych, dlatego często jest zabezpieczony za pośrednictwem TLS.
Na przykład dostępnych jest wiele aplikacji klientów FTP, na przykład FileZilla (graficzny) lub LFTP (wiersz poleceń). Czasami jednak możemy chcieć uzyskać dostęp do serwera FTP, być może zaplanować transfery plików. Jednym łatwym sposobem na to jest użycie języka programowania takiego jak Python. W tym samouczku dowiemy się, jak korzystać z ftplib Biblioteka do interakcji z serwerem FTP.
W tym samouczku się nauczysz:
- Jak utworzyć instancję ftplib.Klasa FTP
- Jak wymienić pliki na zdalnym serwerze FTP
- Jak przesyłać pliki w trybie binarnym i „linii”
- Jak pobierać pliki w trybie binarnym i „linii”
- Jak tworzyć, usuwać i zmieniać nazwy katalogów i plików
- Jak zmienić katalog roboczy
Zastosowane wymagania i konwencje oprogramowania
Kategoria | Wymagania, konwencje lub wersja oprogramowania |
---|---|
System | Niezależny dystrybucja |
Oprogramowanie | Pyton |
Inny | Żadne inne uprawnienia |
Konwencje | # - Wymaga, aby podane Linux -commands były wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda$-wymaga wykonania Linux-commands jako zwykłego niewidzianego użytkownika |
Biblioteka FTPLIB
ftplib Moduł jest częścią standardowej biblioteki Python i zapewnia dwie główne klasy do streszczenia pracy z połączeniem FTP: ftblib.Ftp
I ftplib.Ftp_tls
. Ten ostatni jest podklasą tego pierwszego i dodaje wsparcia Tls. Zobaczmy niektóre z najczęstszych przypadków użycia biblioteki.
Łączenie z serwerem FTP
Aby połączyć się z serwerem FTP, pierwszą rzeczą, którą musimy zrobić, jest utworzenie instancji Ftp
klasa. Klasa obsługuje z
Instrukcja, aby można go było używać z menedżerem kontekstowym: w ten sposób połączenie zostanie automatycznie zamknięte po zakończeniu pracy lub wystąpi błąd. Oto przykład użytkowania:
z ftplib.FTP („FTP.jakiś host.com ') jako ftp: # codehere
Kopiuj Wszystkie parametry Ftp
Konstruktor klas jest opcjonalny, jednak tutaj dostarczyliśmy pierwszy argument zaakceptowany przez niego, który jest gospodarz Chcemy się z nią połączyć. Jeśli argument jest podany, łączyć
Metoda, stosowana do nawiązania połączenia z serwerem, jest domyślnie wywoływana z określonym hostem przekazanym jako argument, w przeciwnym razie należy ją nazwać jawnie:
z ftplib.Ftp () jako ftp: ftp.Connect („FTP.jakiś host.com ')
Kopiuj Drugi argument zaakceptowany przez Ftp
Konstruktor klas jest użytkownik Chcemy zalogować się jak na serwerze FTP. Dostarczenie tego argumentu spowoduje Zaloguj sie
metoda, którą należy nazwać domyślnie z użytkownik
, hasło
I Ackt
Wartości przekazywane jako argumenty (są trzecim i czwartym parametrem konstruktora klasy i domyślnie do pustego ciągu jako wartości):
z ftplib.FTP („FTP.jakiś host.it ', „testuser”, „testPassword”) jako ftp: # codehere
Kopiuj Jeśli argument nie jest podany, Zaloguj sie
Metodę należy nazwać jawnie:
z ftplib.FTP („FTP.jakiś host.to ') jako ftp: ftp.login („testuser”, „hasło”)
Kopiuj Uzyskanie listy plików na serwerze
Raz i Ftp
Obiekt jest tworzony, w zasadzie mamy trzy sposoby uzyskania listy plików przechowywanych na serwerze FTP, z którym jesteśmy podłączeni. Przede wszystkim możemy użyć reż
Metoda, która tworzy listę katalogu zwróconą przez LISTA
Komenda:
>>> z ftplib.FTP („FTP.jakiś host.It ', „użytkownik”, „hasło”) jako ftp: ... ftp.Dir ()
Kopiuj reż
Metoda przyjmuje opcjonalny argument, który jest katalogiem do listy (domyślnie jest to aktualny katalog roboczy, więc w tym przypadku root FTP). Powyższy kod daje wyjście podobne do następujących:
drwxr-xr-x 2 ftp ftp 4096 13 października 14:37 . drwxr-xr-x 2 ftp ftp 4096 13 października 14: 37… -RW ------- 1 ftp ftp 10 września 10 06:04 .ftpquota -Rw-r-r-- 1 ftp ftp 5306756 18 października 01:32.CSV
Druga metoda, której możemy użyć do uzyskania listy plików, jest nlst
. Jak sugeruje jego nazwa, ta metoda pod maską wysyła Nlst
polecenie serwera; Zwraca listę Pythona zawierającą nazwę plików jako członków:
>>> z ftplib.FTP („FTP.jakiś host.It ', „użytkownik”, „hasło”) jako ftp: ... ftp.nlst () ... [”.', „…', '.ftpquota ”,„ plik.CSV ']
Kopiuj Trzecią metodą, której możemy użyć do uzyskania do wyświetlenia zawartości katalogu, jest MLSD
. Ta metoda używa MLSD
polecenie (więc, aby działało, serwer musi go obsługiwać) i akceptuje dwa opcjonalne argumenty:
-
ścieżka
katalogu, który należy wymienić - Lista informacji, które chcemy zawierać w wyniku
Metoda zwraca a generator co daje Dwumieściowe krotki Dla każdego pliku: Pierwszym elementem każdego krotki jest Nazwa pliku; drugi a słownik zawierający żądane informacje i ich wartości. Zobaczmy przykład:
>>> z ftplib.FTP („FTP.jakiś host.It ', „użytkownik”, „hasło”) jako ftp: ... W przypadku nazwy pliku informacje w FTP.MLSD (): ... wydrukuj (nazwa pliku, informacje)
Kopiuj Wyjście powyższego kodu jest następujące:
. „type”: „cdir”, „sizd”: „4096”, „modyfikuj”: „20201013123732”, „unix.Tryb ': „0755”, „Unix.uid ': „1809”, „unix.gid ': „1811”, „unikalny”: „fd04g58e0a67”… „type”: „pdir”, „sizd”: „4096”, „modyfikuj”: „202013123732”, „unix”, „unix.Tryb ': „0755”, „Unix.uid ': „1809”, „unix.gid „:„ 1811 ”,„ unikalny ”:„ FD04G58E0A67 ' .ftpquota „type”: „plik”, „rozmiar”: „10”, „modyfikuj”: „20200910040430”, „UNIX.Tryb „:„ 0600 ”,„ Unix.uid ': „1809”, „unix.GID „:„ 1811 ”,„ unikalny ”:„ FD04G58E0A9D ”.csv 'type': 'plik', 'size': '5306756', 'modyfikuj': '20201017233245', 'unix.tryb „:„ 0644 ”,„ Unix.uid ': „1809”, „unix.gid „:„ 1811 ”,„ unikalny ”:„ FD04G58E020A ”
Zauważ, że serwer nie ma gwarancji szanowania listy wymaganych informacji.
Pobieranie plików z serwera
Aby pobrać pliki z serwera, możemy użyć retrbinary
Lub Retlines
metody. Zobaczmy, jak działają.
retrbinary
Metoda pobiera pliki w trybie transferu binarnego: Tego chcesz użyć, aby po prostu pobrać plik z serwera na komputer lokalny i nie musisz wchodzić w interakcje z jego zawartością. Zobaczmy przykład jego użycia. Powiedzmy, że chcemy pobrać plik.CSV
z serwera; po prostu napisalibyśmy:
>>> z ftplib.FTP („FTP.jakiś host.It ', „użytkownik”, „hasło”) jako ftp: ... z otwartym (plik.csv ', „wb”) jako pobrany_file: ... ftp.retrbinary („Plik wstdz.csv ', pobrany_file.pisać) ... „226-file pomyślnie przeniesiono \ n226 0.823 sekundy (mierzone tutaj), 6.15 mbytes na sekundę '
Kopiuj W powyższym przykładzie otworzyliśmy lokalny plik do pisania tryb binarny
(plik.CSV
) za pomocą menedżera kontekstowego, a następnie nazywanego retrbinary
Metoda przekazywana
odpowiedni Odrastać
polecenie jako pierwszy argument (Wprowadź NameOfheFile
) ipisać
Metoda obiektu pliku pobrany plik
jako drugi argument, który
jest oddzwonić zastosowane do każdego odbioru danych.
Mówiąc o kawałkach danych, maksymalny rozmiar bloku używany do transferu
danych domyślnie jest 8192
bajty. Można to jednak zmienić za pomocą
opcjonalny trzeci parametr retrbinary
metoda.
retrlines
Metoda działa nieco inaczej, ponieważ pobiera pliki w trybie „linii”. Pierwszy argument tej metody może być ważny Odrastać
polecenie, podobnie jak ten, którego użyliśmy w poprzednim przykładzie, ale także LISTA
(Aby pobrać listę nazw plików i informacje o nich) lub Nlst
(odzyskaj tylko nazwy plików). Drugi argument tej metody jest opcjonalny i jest wywołanie zwrotne, które jest stosowane do każdej odzyskanej linii (domyślne zachowanie to drukowanie linii Stdout
). Należy zauważyć, że każda linia jest pozbawiona końca znaku linii, czyli w Linux \N
.
Zobaczmy przykład. Jeśli używamy Retlines
metoda, możemy odzyskać zawartość plik.CSV
Linia plików po linii:
>>> Importuj OS >>> z ftplib.Ftp („host”, „użytkownik”, „hasło”) jako ftp: ... z otwartym (plik.csv ', „w”) jako csvfile: ... ftp.retrLines („Plik wstdz.CSV ', Lambda X: CSFILE.pisać("".dołącz ([X, OS.linie])))) ...
Kopiuj W powyższym przykładzie importowaliśmy OS
Moduł, tak jak wcześniej, utworzyliśmy plik lokalnie, tym razem w trybie tekstowym. Z ftp.retrlines
metoda, którą odzyskaliśmy plik.CSV
Zdalny linia plików po linii. Oddzwonienie, którego użyliśmy jako drugi argument retrlines
jest lambda funkcja, która przyjmuje linię jako argument i wywołuje pisać
Metoda CSVfile
obiekt do napisania linii połączonej z Linie znak odpowiedni dla systemu operacyjnego, do którego dostęp do nas OS.Linie
.
Możemy użyć oddzwaniania, aby również zmodyfikować zawartość pliku w locie. Jako trywialny przykład, wyobraź sobie, że chcemy zwiększyć każde słowa zawarte w zdalnym pliku, gdy przechowujemy je lokalnie. Moglibyśmy napisać:
[[[...] ... ftp.retrLines („Plik wstdz.CSV ', Lambda X: CSFILE.pisać("".Dołącz ([x.Upper (), OS.linie]))))
Kopiuj Ta metoda, jak już wspomnieliśmy, można użyć również do pracy z liniami zwróconymi przez LISTA
Lub Nlst
polecenia. Załóżmy, że chcemy zapisać wynik listy katalogu na zdalnym serwerze w pliku lokalnym:
>>> z ftplib.Ftp („host”, „użytkownik”, „hasło”) jako ftp: ... z otwartym („List_result”, „w”) jako PLIFILE: ... ftp.retrlines („List”, Lambda X: Lokalny plik.pisać("".dołącz ([X, OS.linie]))))
Kopiuj Plik lokalny LIST_RESULT
zostanie utworzony (lub obcięty i zastąpiony, jeśli już istnieje), a jego treść będzie czymś podobnym do:
drwxr-xr-x 2 ftp ftp 4096 13 października 14:37 . drwxr-xr-x 2 ftp ftp 4096 13 października 14: 37… -RW ------- 1 ftp ftp 10 września 10 06:04 .ftpquota -Rw-r-r-- 1 ftp ftp 5306756 18 października 01:32.CSV
Przesyłanie plików do serwera
Kiedy musimy przesłać plik na serwer FTP, możemy również wybrać to w trybie binarnym lub „linii”. Dwie metody, których możemy użyć do wykonania zadania, są odpowiednio: Storek
I LEINES
.
Storek
Metoda Ftp
klasa wymaga dwóch obowiązkowych argumentów, które są ważne Stor
polecenie i obiekt pliku utworzony z pliku lokalnego otwartego w trybie binarnym. Załóżmy, że chcemy przesłać plik; Napisalibyśmy:
>>> z ftplib.Ftp („host”, „użytkownik”, „hasło”) jako ftp: ... z otwartym („Linuxconfig.txt ', „rb”) jako plik_object: ... ftp.storbinary ('stor Linuxconfig.txt ', File_Object)
Kopiuj Naprawdę proste! Oczywiście możemy również przechowywać plik na serwerze o innej nazwie. Obiekt pliku przekazany jako drugi argument storbinary
Metoda jest czytana do EOF. Tak jak w przypadku retrbinary
Metoda, możliwa do zmiany rozmiaru fragmentu danych, z opcjonalnym trzecim argumentem (domyślnie, to ponownie 8192 bajtów). Czwarty argument zaakceptowany przez storbinary
metoda jest opcjonalna oddzwonić funkcja stosowana do każdej części danych.
Aby przesłać linię pliku po linii, możemy użyć Storlines
zamiast tego. W takim przypadku plik, który chcemy przesłać, będzie odczytany wiersz według wiersza. Pierwsze dwa argumenty są takie same zaakceptowane przez storbinary
metoda, podczas gdy trzeci (i ostatni) to oddzwonić To jest stosowane do każdej linii.
Nawigacja, tworzenie katalogów, usuwanie i zmianę nazwy plików
Ftp
klasa (i Ftp_tls
klasa, która ją rozszerza) zapewnia również kilka bardzo przydatnych metod wykonywania niektórych z najczęstszych operacji. Na przykład, aby utworzyć katalog na zdalnym serwerze FTP, możemy użyć mkd
Metoda, która bierze nazwę katalogu, aby stworzyć jako jedyny argument:
>>> ftp.mkd („newdir”) „newdir”
Kopiuj Aby zmienić katalog roboczy, możemy użyć CWD
Metoda, przekazanie nazwy katalogu, do którego chcemy się przenieść jako argument:
>>> ftp.cwd („newdir”) '250 ok. Obecny katalog to /Newdir '
Kopiuj Aby usunąć istniejący katalog, możemy użyć Rmd
Metoda, przekazanie nazwy katalogu do usunięcia:
>>> ftp.RMD („Newdir”) ”250 Direktory został pomyślnie usunięty”
Kopiuj Aby usunąć zwykły plik, możemy użyć usuwać
Zamiast tego metoda, przekazanie nazwy pliku do usunięcia jako argumentu:
>>> ftp.usunąć plik.CSV ')' 250 Usunięty plik.CSV '
Kopiuj Aby zmienić nazwę plików lub katalogów, możemy użyć Przemianować
metoda. Akceptuje dwa argumenty: pierwsza to bieżąca nazwa pliku lub katalogu, druga to nowa. Do zmiany nazwy plik.CSV
Do plik 0.CSV
, Na przykład napisalibyśmy:
>>> ftp.Zmień nazwę pliku.CSV ', „File0.CSV ') „250 Plik pomyślnie przemianowany lub przeniesiony”
Kopiuj Ręczne zamykanie połączenia
Jak już się dowiedzieliśmy, Ftp
Klasa może być używana z menedżerem kontekstowym, dzięki czemu połączenie jest automatycznie zamknięte, gdy interpreter wychodzi z
Blok instrukcji. W przypadkach, w których musimy ręcznie zamknąć połączenie, musimy użyć zrezygnować
Metoda: wywołuje to zamknąć
metoda wewnętrznie i wysyła ZREZYGNOWAĆ
polecenie serwera, aby spróbować zamknąć połączenie z wdziękiem.
Wnioski
W tym artykule nauczyliśmy się korzystać z Pythona ftplib
moduł w celu połączenia się z serwerem FTP i interakcja z nim. Widzieliśmy, jak stworzyć instancję Ftp
klasa i jakie metody możemy użyć do wyświetlenia zawartości zdalnego katalogu i plików przesyłania/pobierania. Widzieliśmy także, jak tworzyć, usuwać, zmienić nazwy i usuwać katalogi lub pliki oraz jak zmienić katalog roboczy. W tym samouczku badaliśmy najczęstsze przypadki użycia, aby uzyskać pełną listę funkcji, odwiedź oficjalną stronę Libftp.
Powiązane samouczki Linux:
- Samouczek LFTP na Linux z przykładami
- Lista klientów FTP i instalacja na Ubuntu 20.04 Linux…
- Lista klientów FTP i instalacja na Ubuntu 22.04 Linux…
- Jak skonfigurować serwer OpenVPN na Ubuntu 20.04
- Ubuntu 20.04: Lista klientów torrentów
- Ubuntu 22.04: Lista klientów torrentów
- Skonfiguruj serwer FTP w systemie Linux
- Rzeczy do zainstalowania na Ubuntu 20.04
- Jak skonfigurować VSFTPD na Debian
- Jak skonfigurować serwer FTP/SFTP i klient na Almalinux