2008/05/23

Bajar automáticamente archivos de un FTP con python

A menudo hay que acceder a un ftp y bajarse gran número de ficheros con un determinado nombre de diferentes directorios. Automatizar este proceso puede ser bastante útil en muchos casos. Usar un cliente FTP gráfico no suele ser de ayuda en estos casos. Los clientes FTP en línea de comandos son interactivos por lo que no se pueden realizar scripts con ellos, más allá de ejecutar una lista de comandos predefinida.

Este simple script se conecta a un servidor, se posiciona en la carpeta 'CATASTRO', y se accede a todos los directorios con profundidad '1' guardando los ficheros que interesan, en este caso shapefiles llamados MASA, en una carpeta local.

#!/usr/bin/python
# DESCRIPTION: Python script that connects to a FTP server and 
#              gets some Shapefiles from 'CATASTRO' folder and subfolders
# AUTHOR: Nacho Uve
# DATE  : May 2008
# LICENSE: GPL2 or greater
from ftplib import FTP

ftp = FTP('server.com');
ftp.login(user='myuser', passwd='mypassword')
ftp.cwd("CATASTRO");

# OPTION: To get a 'ls -l' list                                                                                                                                                                 
# dirs = []                                                                                                                                                                                     
# # Used a callback to 'dirs'                                                                                                                                                                   
# ftp.dir(dirs.append)                                                                                                                                                                          

dirs = ftp.nlst()
for row in dirs:
    print row
    ftp.cwd(row)
    # Save shapefiles in the local machine with the first word of the folder as filename
    ftp.retrbinary('RETR MASA.SHP', open(row.split()[0]+'.shp','wb').write)
    ftp.retrbinary('RETR MASA.SHX', open(row.split()[0]+'.shx','wb').write)
    ftp.retrbinary('RETR MASA.DBF', open(row.split()[0]+'.dbf','wb').write)
    ftp.cwd('..')
ftp.quit()
       
   

No hay comentarios: