Para este caso la situación es esta:
Cada día se generan en un directorio archivos con consolidados de transacciones que deben ser enviados a un servidor externo por ftp. En el directorio permanencen almacenados los archivos generados durante un mes y cada mes se va borrando el más antiguo.
Se necesitaba automatizar ese proceso pero con la condición de que sólo se debía enviar el archivo generado el último día; para ello creamos entonces el siguiente script en Python que se conecta al servidor remoto para listar los archivos que tiene ya cargados; genera el listado del servidor local con los archivos generados desde hace un mes hasta la fecha.
El script revisa/compara el listado y si en el servidor local existe un archivo que no se encuentra en el remoto entonces procede a enviarlo.
Existen diferentes formas de hacer esto, pero para efectos de repasar lectura y escritura de archivos lo hicimos así:
#!/usr/bin/python
# Importa librerias necesarias para trabajarimport pysftp # Permite conectar remotamenteimport os # Permite ejecutar comandos de sistema operativo
# Lista archivos localesarchivo_remoto = os.listdir('/consolidados/salida/')
# Almacenamos la lista en un arreglofor archivo in archivo_remoto:
# Guardamos el resultado en un archivo de texto local=open('archivo_remoto.txt','w')
local.write(str(archivo))
with pysftp.Connection('dominioalqueconecta.com', username='usuario', password='clave') as sftp:
with sftp.cd('/out'):
archivo_sftp = sftp.listdir()
remoto=open('archivo_local.txt','w')
remoto.write(str(archivo_sftp))
# Comparo los archivosf_local=open('archivo_remoto.txt','r')
comparar = f_local.readlines()
for i in comparar:
f_remoto = open('archivo_local.txt','r')
full = f_remoto.read()
if full.find(str(i))>=0:
print i,' Existe \n' else:
print i
# Envio el archivo faltante with pysftp.Connection(''dominioalqueconecta.com', username='usuario', password='clave') as sftp:
with sftp.cd('/out'):
sftp.put('/archivos/salida/'+str(i))
f_remoto.close()
f_local.close()
sftp.close()
Como para mejorarle faltaría el envio de correo indicando el resultado del escript; si envio archivo, que archivo envio, si fallo, cual fue la falla, etc.
Espero este código les pueda servir de guía .
No hay comentarios:
Publicar un comentario