FTP или протокол передачи файлов — это хорошо известный сетевой протокол, используемый для передачи файлов между компьютерами в сети. Он создан на архитектуре клиент-сервер и может использоваться вместе с аутентификацией пользователя. Его также можно использовать без аутентификации, но это будет менее безопасно. FTP-соединение, которое поддерживает текущий рабочий каталог и другие флаги, и для каждой передачи требуется вторичное соединение, через которое передаются данные. Наиболее распространенные веб-браузеры могут извлекать файлы, размещенные на FTP-серверах.
Методы в классе FTP
В python мы используем модуль ftplib, у которого есть следующие обязательные методы для вывода списка файлов по мере их передачи.
метод | Описание |
---|---|
PWD () | Текущий рабочий каталог. |
CWD () | Измените текущий рабочий каталог на путь. |
реж ([путь [… [, центибар]]) | Отображение списка каталогов пути. Необязательный cb обратного вызова передается в retrlines (). |
штормы (cmd, f) | Загружает текстовый файл, используя заданный FTP cmd — например, имя файла STOR. |
storbinary (cmd, f [, bs = 8192]) | Аналогичен storlines (), но используется для двоичных файлов. |
удалить (путь) | Удаляет удаленный файл, расположенный по пути. |
мкд (каталог) | Создает удаленный каталог. |
исключение ftplib.error_temp | Исключение возникает при получении кода ошибки, обозначающего временную ошибку (коды ответов в диапазоне 400–499). |
исключение ftplib.error_perm | Исключение возникает при получении кода ошибки, означающего постоянную ошибку (коды ответа в диапазоне 500–599). |
подключиться (хост [, порт [, тайм-аут]]) | Подключается к данному хосту и порту. Номер порта по умолчанию — 21, как указано в протоколе FTP. |
уволиться() | Закрывает соединение и выходит. |
Ниже приведены примеры некоторых из вышеперечисленных методов.
Листинг файлов
В приведенном ниже примере используется анонимный вход на FTP-сервер и выводится список содержимого текущего каталога. Он обрабатывает имена файлов и каталогов и сохраняет их в виде списка. Затем распечатывает их.
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
Когда мы запускаем вышеуказанную программу, мы получаем следующий вывод:
- 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
Изменение каталога
Приведенная ниже программа использует метод cwd, доступный в модуле ftplib, чтобы изменить каталог и затем извлечь необходимый контент.
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
Когда мы запускаем вышеуказанную программу, мы получаем следующий вывод:
- 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
Извлечение файлов
После получения списка файлов, как показано выше, мы можем получить определенный файл, используя метод getfile . Этот метод перемещает копию файла из удаленной системы в локальную систему, откуда было инициировано соединение ftp.
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()
Когда мы запускаем вышеуказанную программу, мы обнаруживаем, что файл README.nlug присутствует в локальной системе, откуда было инициировано соединение.