Введение в Python FTP

Введение В этом руководстве мы рассмотрим, как использовать FTP [https://en.wikipedia.org/wiki/File_Transfer_Protocol] с Python для отправки и получения файлов с сервера по TCP / IP [https: //en.wikipedia. org / wiki / Internet_protocol_suite] подключения. Чтобы упростить задачу и сделать ее более абстрактной, мы будем использовать библиотеку Python ftplib [https://docs.python.org/3/library/ftplib.html], которая предоставляет ряд функций, облегчающих работу с FTP. Мы увидим реализацию для upl

Вступление

В этом руководстве мы рассмотрим, как использовать FTP с Python для отправки и получения файлов с сервера через соединения TCP / IP .

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

Что такое FTP?

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

Работа с FTP в Python

Двигаясь дальше, вы были бы рады узнать, что ftplib - это встроенная библиотека, которая уже установлена вместе с Python, все, что вам нужно сделать, это импортировать ее в свой скрипт, и вы можете начать использовать ее функции. Чтобы импортировать его, используйте следующую команду:

 from ftplib import FTP 

После этого нам нужно инициировать соединение с FTP-сервером, с которым мы хотим открыть канал связи. Для этого создайте экземпляр ftp

 # Replace the example domain with your domain name 
 ftp = FTP('ftp.example.com') 

Вышеупомянутый метод использует порт по умолчанию, то есть порт 21, для установления соединения с сервером. Следующим шагом является предоставление учетных данных для входа, то есть вашего имени пользователя и пароля, чтобы получить доступ к файлам на сервере. Для этого вы можете использовать следующий метод:

 ftp.login('your_username','your_password') 

Значения по умолчанию для имени пользователя и пароля - «анонимный» и « [защищенный адрес электронной почты]{.cf_email} » соответственно. Если соединение установлено успешно, вы должны получить сообщение, подобное «230 Login Successful».

Теперь, когда мы установили соединение с сервером, мы хотим перейти в каталог, в котором мы хотим выполнять операции, то есть получать или записывать файл. Для этого мы меняем «текущий рабочий каталог», используя следующую команду:

 ftp.cwd('/path/to/the/directory/') 

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

 file_name = 'a-filename.txt' 
 my_file = open(file_name, 'wb') # Open a local file to store the downloaded file 
 ftp.retrbinary('RETR ' + file_name, my_file.write, 1024) # Enter the filename to download 

В retrbinary выше вызове retrbinary 1024 означает, что файл будет загружен блоками по 1024 байта, пока не будет передан весь файл.

Есть еще одна вещь, которую вам нужно сделать после загрузки или выгрузки файла - закрыть этот файл, а также закрыть FTP-соединение, которое вы открыли. Вы можете сделать это для приведенного выше примера с помощью следующих двух строк кода:

 ftp.quit() # Terminate the FTP connection 
 my_file.close() # Close the local file you had opened for downloading/storing its content 

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

 file_name = 'a-filename.txt' 
 ftp.storbinary('STOR ' + file_name, open(file_name, rb)) 

В приведенных выше примерах «rb» и «wb» означают «чтение двоичного кода» и «запись двоичного файла» соответственно.

Дополнительные функции FTP

Теперь, когда мы обсудили реализацию основных функций, давайте рассмотрим некоторые дополнительные функции, которые предоставляет ftplib

Список файлов и каталогов

Чтобы просмотреть файлы и папки в текущем рабочем каталоге в формате списка, выполните команду retrlines :

 ftp.retrlines('LIST') 

Создать новый каталог

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

 ftp.mkd('/path/for/the/directory') 

Путь - это место, в котором вы хотите разместить новый каталог.

Удалить файл с сервера

Удалить файл на сервере довольно просто, вам просто нужно указать имя файла в качестве параметра функции удаления. Об успехе или неудаче операции будет сообщено в ответном сообщении.

 ftp.delete('file_name_to_delete') 

Проверить текущий путь

Чтобы проверить текущий путь, просто запустите следующий код:

 ftp.pwd() 

Эта команда вернет абсолютный путь к текущему рабочему каталогу.

Осторожность

Важно отметить, что хотя FTP сам по себе достаточно безопасен, он обычно не используется для передачи конфиденциальной информации; если вы переносите что-то подобное, вам следует выбрать более безопасные варианты, такие как SFTP (Secure FTP) или SSH (Secure Shell). Это наиболее часто используемые протоколы для обработки конфиденциальной передачи данных.

Заключение

В этом посте мы обсудили, что такое FTP и как он работает, на различных примерах. Мы также увидели, как использовать модуль Python ftplib для связи с удаленным сервером с помощью FTP, и увидели некоторые другие функции, которые предлагает этот модуль. В конце мы также обсудили некоторые более безопасные альтернативы FTP, такие как SFTP и SSH, которые используются для передачи конфиденциальной информации.

Для получения дополнительной информации об использовании FTP с Python см. Официальную документацию ftplib или RFC 959 .

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus