Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

Python работа с FTP - Модуль ftplib

Python работа с FTP - Модуль ftplib

Клиентская часть в Python реализуется при помощи модуля ftplib. Использовать непосредственно данный модуль на практике приходится не так часто, в связи с тем, что есть другой модуль urllib, имеющий более высокоуровневый интерфейс. Модуль ftplib может пригодится когда в вашей программе необходим более обширный контроль над низкоуровневыми FTP соединениями. Для более понятной работы с модулем ftplib советуем поближе изучить протокол FTP.

Модуль определяет единственный класс, используемый для создания FTP-соединения:

con = FTP(хост, ftp-пользователь, пароль пользователя, учетная запись, время ожидания)

После вызова класса FTP, создается объект представляющий FTP-соединение. Первый аргумент хост является обязательным в нем передается имя хоста, это может быть IP или название домена. Остальные параметры являются необязательными, если хост не требует введение аутентификационных данных.

Вызывая класс без аргументов, чтобы установить соединение, потребуется вызвать метод connect() и login(). При указании лишь аргумента хост, метод connect() будет вызываться автоматически в конструкторе. Тот же случай при указании данных пользователя сразу при вызове класса FTP, метод login() будет вызван автоматически. Последний аргумент "время ожидания" указывается в секундах, если по истечению данного срока соединение не будет установлено класс закончит работу.

Методы класса FTP

con.abort()

Отправляет запрос для прерывания попытки продолжающуюся передачу файлов. В зависимости от настроек и особенностей удаленного сервера, результат данного метода может не дать нужного результата

con.close()

Закрывает FTP-соединение. После выполнения данного метода, никакие операции больше не могут выполнятся в сторону объекта con.

con.connect(хост, порт, время ожидания)

Открывает новое FTP соединение для указанного хоста, подключаясь к указанному порту (обычно это порт 21 или в случае SFTP 22). Если данные подключения уже ранее передавались конструктору FTP, нет необходимости вызывать метод con.connect()

con.cwd(путь к папке)

Выполняет переход по указанному пути тем самым изменяя текущий рабочий каталог.

con.delete(путь до файла)

Удаляет указанный файл с сервера.

con.dir(dirname, ... , ... , callback)

Создает список с содержимым каталога, который создается командой LIST. В аргументе dirname указывается имя каталога, для которого будет составлен список содержимого.

con.login(пользователь, пароль, учетная запись)

Выполняет аутентификацию на сервере используя указанные в аргументах данные. Первый аргумент с именем пользователя имеет по умолчанию значение "anonymous". Пароль не является обязательным аргументом, по умолчанию является пустой строкой. Данный метод вызывать нет необходимости, если данные аутентификации были переданы в конструктор FTP

con.mkd(новый путь)

Создает новый каталог на сервере.

con.transfercmd(command, rest)

Инициирует передачу через FTP-соединение обмена данными. Как только соединение будет установлено, выполняется FTP-команда command.

Эффективное и недорогое SMM продвижение более, чем в 9 социальных сетях, Вам предлагает сайт https://doctorsmm.com/. Здесь Вы найдете широкий спектр услуг по раскрутке аккаунтов, сообществ и каналов в любой соцсети. На сайте доступны такие ресурсы, как подписчики, лайки, репосты, просмотры и многое другое.

Метод возвращает объект сокета, соответствующему открытому соединению, предназначенный для передачи данных. Аргумент rest отправляет смещение в байтах, но не все сервера поддерживают такой запрос использование данного аргумента вызывает ошибку.

con.pwd()

Строка с текущим рабочим каталогам на сервере

con.quit()

Отправляя серверу команду 'QUIT', закрывает FTP-соединение.

con.rename(старое имя, новое имя)

Переименование файлов на сервере

con.sendcmd(команда)

Отправляет серверу команду и ожидает ответа. Данный метод используется для выполнения команд которые не имеют ничего общего с передачей данных.

con.set_pasv(pasv)

Установка пассивного режима. Значение True для аргумента pasv включает пассивный режим. По умолчанию пассивный режим выключен.

con.size(путь до файла)

После выполнения возвращает размер указанного файла в байтах. Если не удается определить размер файла, возвращается значение None.

con.storbinary(команда, файл, [, blocksize])

Выполняет указанную команду на сервер и возвращает результат работы, используя двоичный режим передачи. В аргументе команда, передается строка с низкоуровневой командой которая имеет вид "STOR filename". В аргументе "файл" отправляется открытый объект файла, откуда вызовом метода file.read(blocksize) будут читаться данные и отправляться на сервер. Аргумент blocksize определяет размер блока передачи на сервер.

Python Загрузка файла на сервер через FTP

В следующем примере мы покажем как при помощью модуля ftplib на Python загрузить файл на сервер через FTP

import ftplib
 
host = "ftp.ex.ru"
ftp_user = "root"
ftp_password = "python"
filename = "picture.png"
 
con = ftplib.FTP(host, ftp_user, ftp_password)
# Открываем файл для передачи в бинарном режиме
f = open(filename, "rb")
# Передаем файл на сервер
send = con.storbinary("STOR "+ filename, f)
# Закрываем FTP соединение
con.close

Русское СЕО сообщество все сильнее нацеливается на поисковую систему Google. Google имеет ряд достоинств которые облегчают работу над сайтов и делает его более посещаемым. Постоянная работа над сайтов и выполнение гугл поисковая оптимизация повысит ваш сайт в результатах гугл.

Комментариев: 9
  1. Если, допустим, в filename написать не picture.jpg, а D:\\picture.jpg, вылазит ошибка. Почему7

  2. Lena, укажите текст ошибки - разберемся. Без точных указании обработчика я не могу понять какая там ошибка.

  3. Егорка | 2014-02-05 в 20:07:00

    Автору спасибо, материал пригодился.

    По поводу вопроса с именем файла:

    потому что в строке

    >>> send = con.storbinary("STOR "+ filename, f)

    filename играет роль названия которое получит наш файла на фтп, и оно конфликтует с локальными путями, т.к. таких на фтп не существует.

    Данный скрипт рассчитан на загрузку файлов которые лежат в папке со скриптом.

    Лечится вот так:

    >>> send = con.storbinary("STOR "+ filename.split('/')[-1], f)

  4. алексей | 2015-12-03 в 07:43:54

    если у меня filename это руускоязычное имя файла. получаю ошибку кодировки. как испраить незнаю

  5. Вячеслав | 2017-11-22 в 10:05:47

    А как скачать с докачкой (произошел разрыв соединения)?

  6. con.dir(dirname, ... , ... , callback)

    Создает список с содержимым каталога, который создается командой LIST. В аргументе dirname указывается имя каталога, для которого будет составлен список содержимого.

    А как получить список не на экране, а в виде переменной?

    Как узнавать и обрабатывать коды ошибок при работе с FTP?

  7. У меня тоже проблемы возникают с изображениями. Мануал полный по этой теме есть?

  8. Сергей Буровский | 2023-03-26 в 12:55:34

    Пробовали победить этот баг сами, но нет. Думаю нужен суперпрофи за деньги)

  9. Да. Нам сайт специалист делал - деньги отдал и голова не болит. Все косяки убрал, Норм!

Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)