Python — как работать с FTP?
— ввел недавно я в Google, и обалдел от количества ссылок с полезными (и не очень) материалами. Их реально много, и что бы не ковыряться в них я сделал выжимку в виде текста ниже, которая, надеюсь, будет вам полезна. Мне — точно, ибо бОльшая часть записей в моем блоге делается для себя — эдакая записная книжка, в которую иногда подглядываешь.
Итак, FTP.
Как положено любому занудному блогеру — обязательно нужно вспомнить о дате создания FTP-протокола (1971 год).
А еще — нужно рассказать, зачем он — этот самый FTP — нужен (уверен, вы и так знаете, иначе зачем бы вы искали этот материал, да еще применительно к Python?).
Понудили, и хватит. Переходим к делу.
Наиболее простым с моей точки зрения методом работы с FTP в Python является использование библиотеки ftplib, доступной по ссылке. Установить ее можно либо через pip: pip install, либо (если вы используете, например, PyCharm) — через установку Plugins: Settings — Plugins.
Подключать библиотеку к коду:
import ftplib
ftp = ftplib.FTP(host, ftp_user, ftp_password) — задаем параметры авторизации
Что бы было более понятно — представим каждый параметр в виде переменной:
host = str(input(‘Host?: ‘))
ftp_user = str(input(‘User? :’))
ftp_password = str(input(‘Password? :’))
после чего каждую переменную подключим к авторизации:
ftp = ftplib.FTP(host, ftp_user, ftp_password)
Ниже — короткое видео, демонстрирующее процесс инициализации соединения более наглядно:
После этого мы можем:
- получить приветственное сообщение с FTP-сервера:
-
- text = ftp.getwelcome() # Кладем в переменную приветственное сообщение с FTP-сервера
-
- print(text) # Выводим сообщение на экран
-
- Заходить в нужные директории:
-
- ftp.cwd(‘y’) # заходим в директорию y
-
- Получать список файлов в директории:
-
- list = ftp.nlst() # загоняем в переменную list список содержимого директории
print(list) # выводим содержимое на экран
-
- Создавать каталоги:
-
- ftp.mkd(‘New’) # Создаем каталог
-
- Или удалять их:
-
- ftp.rmd(‘New’) # Удаляем каталог
-
- Кстати, получить список всех каталогов мы тоже можем:
-
- ftp.dir
-
- Удалять файлы мы, кстати, тоже можем:
-
- ftp.delete(‘filename’)
-
- А еще мы можем получать размер нужного файла:
-
-
- size = ftp.size(‘ResizeImages.exe’) # Запрашиваем размер файла ResizeImages.exe
-
-
- print(size, ‘kb’) # Выводим размер файла
-
- А еще можно отправлять нужные вам команды непосредственно на FTP-сервер:
-
-
- FTP.sendcmd() # команду нужно указать внутри скобок, да 🙂
-
Важно: команда пишется в кавычках!Сами команды вот:
ABOR — Прервать передачу файла
CDUP — Сменить директорию на вышестоящую
CWD — Сменить директорию
DELE — Удалить файл (DELE filename)
EPSV — Войти в расширенный пассивный режим. Применяется вместо PASV
HELP — Выводит список команд, принимаемых сервером
LIST — Возвращает список файлов директории. Список передаётся через соединение данных
MDTM — Возвращает время модификации файла
MKD — Создать директорию
NLST — Возвращает список файлов директории в более кратком формате, чем LIST. Список передаётся через соединение данных
NOOP — Пустая операция
PASS — Пароль
PASV — Войти в пассивный режим. Сервер вернёт адрес и порт, к которому нужно подключиться, чтобы забрать данные. Передача начнётся при введении следующих команд: RETR, LIST и т. д.
PORT — Войти в активный режим. Например PORT 12,34,45,56,78,89. В отличие от пассивного режима для передачи данных сервер сам подключается к клиенту
PWD — Возвращает текущую директорию
QUIT — Отключиться
REIN — Реинициализировать подключение
RETR — Скачать файл. Перед RETR должна быть команда PASV или PORT
RMD — Удалить директорию
RNFR и RNTO — Переименовать файл. RNFR — что переименовывать, RNTO — во что
SIZE — Возвращает размер файла
STOR — Закачать файл. Перед STOR должна быть команда PASV или PORT
SYST — Возвращает тип системы (UNIX, WIN, …)
TYPE — Установить тип передачи файла (бинарный, текстовый)
USER — Имя пользователя для входа на серверОк, с основами разобрались … а что делать, если, например, хочется переименовать файл? Все просто:
-
- ftp.rename(‘Old_name’, ‘New_name’)
- Ой, совсем забыл… а как же сохранять файлы в FTP и сливать оттуда? На помощь в загрузке НА FTP придет следующее:
- storlines – используется для загрузки текстовых файлов: txt, html, rst и т.д.
-
- ftp.storlines(‘filename’)
-
- storbinary – необходимо для загрузки бинарных файлов: pdf, xls и прочее
-
- ftp.storbinary(‘filenames’)
-
- А для сохранения файла С FTP используем конструкцию:
-
-
- with open(‘путь_к_каталогу_для_сохранения_файла’, ‘wb’) as f:
-
-
- ftp.retrbinary(‘RETR ‘ + ‘filename’, f.write)
-
- Вроде как все. В случае возникновения вопросов — пожалуйста, пишите 🙂
Спасибо за внимание!
UPD: спасибо одному из читателей блога 🙂 Отметил, что неплохо бы было добавить информацию о таймауте ожидания соединения с сервером. Добавляю 🙂
ftp = ftplib.FTP('127.0.0.1', timeout=100)
Как видите — все просто 😉
Support the Blog!
Running a blog takes a lot of effort, time, and passion. Your donations help improve the content, inspire new ideas, and keep the project going.
If you’ve enjoyed the blog’s materials, any support would mean the world to me. Thank you for being here! ❤️