ftplib
(FTP): Встроенная библиотека. Подключаемся к серверу, переходим в нужную директорию и используем retrbinary('RETR filename', callback)
для скачивания файла. Callback функция обрабатывает получаемые данные.requests
(HTTP/HTTPS): Если файл доступен по HTTP/HTTPS, используем requests.get(url, stream=True)
и читаем данные потоком.paramiko
(SFTP/SSH): Подключаемся к серверу по SSH, открываем SFTP клиент и используем get(remotepath, localpath)
.ftplib
(FTP): Подключаемся к серверу, переходим в нужную директорию и используем storbinary('STOR filename', fileobject)
для загрузки файла.requests
(HTTP/HTTPS): Можно использовать requests.put(url, data=fileobject)
, если сервер поддерживает PUT запросы.paramiko
(SFTP/SSH): Подключаемся к серверу по SSH, открываем SFTP клиент и используем put(localpath, remotepath)
.ftplib
, чтение):
import ftplib
ftp = ftplib.FTP('ftp.example.com')
ftp.login('username', 'password')
ftp.cwd('/path/to/directory')
def callback(data):
print(data.decode('utf-8')) # Или другая обработка
ftp.retrbinary('RETR filename.txt', callback)
ftp.quit()
Обязательно нужно обрабатывать исключения и закрывать соединения после завершения работы. Выбор протокола и библиотеки зависит от требований к безопасности и функциональности.
Для чтения и записи файлов на удаленном сервере через протоколы, такие как FTP, в Python можно использовать несколько библиотек. Самые распространенные:
ftplib
(для FTP): Встроенная библиотека Python, предоставляющая базовую функциональность FTP.paramiko
(для SFTP и SSH): Более универсальная библиотека, использующаяся для защищенной передачи файлов по SSH (SFTP). Часто предпочтительнее FTP из-за безопасности.pysftp
(SFTP): Удобная обертка над paramiko
, упрощающая многие операции SFTP.Примеры:
1. FTP (используя ftplib
):
import ftplib
ftp = ftplib.FTP('ftp.example.com')
ftp.login('username', 'password')
# Чтение файла
with open('local_file.txt', 'wb') as fp:
ftp.retrbinary('RETR remote_file.txt', fp.write)
# Запись файла
with open('local_file.txt', 'rb') as fp:
ftp.storbinary('STOR remote_file.txt', fp)
ftp.quit()
Важно: Замените ftp.example.com
, username
, password
, remote_file.txt
и local_file.txt
на фактические значения.
2. SFTP (используя paramiko
):
import paramiko
hostname = 'your_server_ip'
username = 'your_username'
password = 'your_password'
port = 22 # Стандартный порт SSH
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #Внимание: Не безопасно для production!
ssh.connect(hostname, port, username, password)
sftp = ssh.open_sftp()
# Чтение файла
sftp.get('/path/to/remote_file.txt', 'local_file.txt')
# Запись файла
sftp.put('local_file.txt', '/path/to/remote_file.txt')
sftp.close()
ssh.close()
except Exception as e:
print(f"Ошибка: {e}")
Важно:
your_server_ip
, your_username
, your_password
, /path/to/remote_file.txt
и local_file.txt
на соответствующие значения.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
не безопасен для production. В production-среде необходимо проверять fingerprint хоста.3. SFTP (используя pysftp
):
import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None # Отключает проверку ключа хоста (только для тестирования!)
with pysftp.Connection('your_server_ip', username='your_username', password='your_password', cnopts=cnopts) as sftp:
# Чтение файла
sftp.get('/path/to/remote_file.txt', 'local_file.txt')
# Запись файла
sftp.put('local_file.txt', '/path/to/remote_file.txt')
Важно:
your_server_ip
, your_username
, your_password
, /path/to/remote_file.txt
и local_file.txt
на соответствующие значения.cnopts.hostkeys = None
) крайне не рекомендуется в production. Необходимо настроить корректную проверку ключа хоста для безопасности.Дополнительные замечания:
try...except
блоки) для обработки возможных ошибок при подключении, чтении/записи файлов и т.д.paramiko
или pysftp
) значительно безопаснее, чем FTP, так как передает данные в зашифрованном виде. По возможности, используйте SFTP. Не используйте FTP для передачи конфиденциальной информации.paramiko
и pysftp
поддерживают аутентификацию по ключам.requests
или urllib
.