Descargar archivo por FTP con Python

Si necesitamos descargar algún archivo desde un servidor remoto, lo podemos hacer gracias a Python.
Entre las diferentes utilidades que se le puede dar a este pequeño pedazo de código seria la de por ejemplo hacer descargar los Backups de un servidor de forma automática.

 

"""
Recursively backup all the files from a remote directory using ftp.
"""

# information about the source ftp server
# and the target directory on my laptop

hostname = 'ftp.dlptest.com'
username = '[email protected]'
password = 'e73jzTRTNqCN9PYAAjjn'
start_directory = '/'
backup_dir = 'C:\\Users\\Oficina\\Desktop\\back_wp\\hidro\\'

import ftplib
import os
import datetime

def get_files_directories():

    dirlisting = []
    
    ftp_obj.retrlines('LIST',callback=dirlisting.append)
    
    files = []
    directories = []
    
    for l in dirlisting:
        lastspace = l.rindex(' ')
        file_name = l[lastspace+1:]
        if l[0] == 'd':
            directories.append(file_name)
        elif l[0] == '-':
            files.append(file_name)
            
    return files,directories
    
def backup_directory(local_dir,remote_dir):

    os.chdir(local_dir)
    ftp_obj.cwd(remote_dir)
    print('In directory '+remote_dir)

    files,directories = get_files_directories()

    for f in files:
        print('Backing up OK'+f)
        try:
            ftp_obj.retrbinary('RETR '+f, open(f, 'wb').write)
        except ftplib.error_perm:
            print('Skipping '+f+' due to permissions')
        
    for d in directories:
        newremote = remote_dir+d+'/'
        newlocal = local_dir+'\\'+d
        try:
            os.mkdir(newlocal)
        except:
            continue
        backup_directory(newlocal,newremote)
        
# Main program

# backup directories under here

os.chdir(backup_dir)

# Create directory with today's date

datestring = str(datetime.date.today())

os.mkdir(datestring)
os.chdir(datestring)
local_dir = os.getcwd()

# connect to ftp server

ftp_obj = ftplib.FTP(host=hostname, user=username, passwd=password)

# back up everthing from top directory

remote_dir = start_directory

backup_directory(local_dir,remote_dir)

# quit ftp connection

ftp_obj.quit()


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *