Python - FTP

FTPou File Transfer Protocol é um protocolo de rede conhecido usado para transferir arquivos entre computadores em uma rede. Ele é criado na arquitetura cliente-servidor e pode ser usado junto com a autenticação do usuário. Ele também pode ser usado sem autenticação, mas será menos seguro. Conexão FTP que mantém um diretório de trabalho atual e outros sinalizadores, e cada transferência requer uma conexão secundária através da qual os dados são transferidos. Os navegadores da web mais comuns podem recuperar arquivos hospedados em servidores FTP.

Os métodos na classe FTP

Em python, usamos o módulo ftplib que tem os métodos necessários abaixo para listar os arquivos à medida que os transferiremos.

Método Descrição
pwd () Diretório de trabalho atual.
cwd () Altere o diretório de trabalho atual para o caminho.
dir ([caminho [, ... [, cb]]) Exibe a lista de diretórios do caminho. Call-back opcional cb passado para retrlines ().
linhas de armazenamento (cmd, f) Carrega o arquivo de texto usando o cmd FTP fornecido - por exemplo, nome do arquivo STOR.
estorbinário (cmd, f [, bs = 8192]) Semelhante a storlines (), mas é usado para arquivos binários.
deletar (caminho) Exclui o arquivo remoto localizado no caminho.
mkd (diretório) Cria um diretório remoto.
exceção ftplib.error_temp Exceção gerada quando um código de erro significando um erro temporário (códigos de resposta no intervalo 400–499) é recebido.
exceção ftplib.error_perm Exceção levantada quando um código de erro significando um erro permanente (códigos de resposta no intervalo 500–599) é recebido.
conectar (host [, porta [, tempo limite]]) Conecta-se ao host e à porta fornecidos. O número da porta padrão é 21, conforme especificado pelo protocolo FTP.
Sair() Fecha a conexão e sai.

Abaixo estão os exemplos de alguns dos métodos acima.

Listando os arquivos

O exemplo a seguir usa login anônimo para o servidor ftp e lista o conteúdo do diretório atual. Ele trata o nome dos arquivos e diretórios e os armazena como uma lista. Em seguida, imprime-os.

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

Quando executamos o programa acima, obtemos a seguinte saída -

- 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

Mudando o diretório

O programa abaixo usa o método cwd disponível no módulo ftplib para alterar o diretório e, em seguida, buscar o conteúdo necessário.

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

Quando executamos o programa acima, obtemos a seguinte saída -

- 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

Buscando os arquivos

Depois de obter a lista de arquivos conforme mostrado acima, podemos buscar um arquivo específico usando o getfilemétodo. Este método move uma cópia do arquivo do sistema remoto para o sistema local de onde a conexão ftp foi iniciada.

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()

Quando executamos o programa acima, encontramos o arquivo README.nlug presente no sistema local de onde a conexão foi iniciada.