clsFTP.interactivo() navegar por un ftp y descargar archivo o directorio

  • 3 Respuestas
  • 338 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado darkucla

  • *
  • Underc0der
  • Mensajes: 9
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
Hola, soy Elfo!

Ahora les comparto este código el cuál utilizo para descargar archivos o directorios completos por ftp..
En la página para principiantes de facebook he estado compartiendo  este y otros códigos
Le faltan detalles.. espero alguien aquí le pueda servir y/o pueda ayudarme a mejorarlo

En la función interactivo() acepta comandos como
dir --> muestra listado directorio local actual
cd --> cambia directorio local
..  --> regresa al directorio padre remoto
<numero>   --> en el listado remoto slecciona el numero para acceder al directorio
d <numero> --> descarga el archivo o directorio enumerado al directorio local actual
q   --> termina interactivo

Código: Python
  1. import os  # clsFTP, copia(), clsUAC
  2. # import sys  # clsUAC
  3. # import ctypes   # clsUAC
  4.  
  5. # import shutil      # copia()
  6. # from distutils.dir_util import copy_tree   # copia()
  7.  
  8. from ftplib import FTP   # clsFTP
  9.  
  10. class clsFTP():
  11.     def __init__(self):
  12.         self.DirLocal = os.getcwd()
  13.         self.Servidor = ""
  14.         self.Usuario = ""
  15.         self.Password = ""
  16.         self.DirRemoto = ""
  17.         self.bolConectado = False
  18.    
  19.     def conecta(self, strServidor, strUsuario, strPassword):
  20.         try:
  21.             self.Servidor = strServidor
  22.             self.strUsuario = strUsuario
  23.             self.Password = strPassword
  24.             self.ftp =  FTP(strServidor,strUsuario,strPassword)
  25.             self.DirRemoto = self.ftp.pwd()
  26.             self.bolConectado = True
  27.             print(self.ftp.getwelcome())
  28.         except Exception as err:
  29.             self.bolConectado = False
  30.             print("ERROR DE CONEXION")
  31.             print(err)
  32.  
  33.     def desconecta(self):
  34.         self.ftp.quit()
  35.         self.bolConectado = False
  36.  
  37.     def dirLocal(self, strDirLocal):
  38.         if not os.path.isdir(strDirLocal):
  39.             os.makedirs(strDirLocal, exist_ok=True)
  40.         os.chdir(strDirLocal)        
  41.     def descarga(self, ruta, filename):
  42.         print("DESCARGAR ", ruta + "/" + filename, " a ", os.getcwd())
  43.         try:
  44.             with open(filename, "wb") as fp:
  45.                 self.ftp.retrbinary("RETR " + ruta + "/" + filename, fp.write)
  46.             # print(self.ftp.size(filename))
  47.             # print(os.path.getsize(filename))
  48.  
  49.         except Exception as e:
  50.             print("Error " + str(e))
  51.             try:
  52.                 self.ftp.cwd(ruta + "/" + filename)
  53.                 fp.close()
  54.                 os.remove(filename)
  55.                 os.mkdir(filename)
  56.                 os.chdir(filename)
  57.                 listaD = self.ftp.nlst()
  58.                 for i in range(len(listaD)):
  59.                     self.descarga(self.ftp.pwd(), listaD[i])
  60.                 self.ftp.cwd("..")
  61.                 os.chdir("..")
  62.             except Exception as e:
  63.                 print("Error Download" + str(e))
  64.     def interactivo(self):
  65.         while 1:
  66.             self.listarRemoto()
  67.             self.DirRemoto = self.ftp.pwd()
  68.             self.DirLocal = os.getcwd()
  69.             print("\nFTP  by UCLA")
  70.             print("Servidor:",self.Servidor)
  71.             print("Directorio Local:",self.DirLocal)
  72.             print("Directorio Remoto:",self.DirRemoto)
  73.             #print("\n")
  74.             strOpcion = input("Opción (H ayuda): ")
  75.             if strOpcion.lower() == "q":
  76.                 break
  77.             self.evaluaOpcion(strOpcion)
  78.     def evaluaOpcion(self, strOpcion):
  79.         strOpcion = strOpcion.lower().strip()
  80.         dicOpciones = {"ll" : "self.listarLocal()", "lr" : "self.listarRemoto()",
  81.                        "cr" : "self.cdRemoto()",
  82.                        "h" : "self.Ayuda()"
  83.                         }
  84.         if strOpcion[0] == "d":
  85.             if strOpcion[0:3] == "dir":
  86.                 self.listarLocal()
  87.             else:
  88.                 intOpcion = int(strOpcion.replace("d",""))
  89.                 self.descarga(self.ftp.pwd(), self.lstDirectorio[intOpcion][1])
  90.         if strOpcion[0:2] == "..":
  91.             self.ftp.cwd("..")
  92.         if strOpcion.isdigit():
  93.             intOpcion = int(strOpcion)
  94.             try:
  95.                 self.ftp.cwd(self.lstDirectorio[intOpcion][1])
  96.             except Exception as e:
  97.                 print("Error al cambiar directorio remoto: " + str(e))
  98.         if strOpcion[0:2] == "cd":
  99.             try:
  100.                 os.chdir(strOpcion[3:])
  101.             except Exception as e:
  102.                 print("error al cambiar directorio local " + str(e))
  103.        
  104.         if strOpcion in dicOpciones.keys():
  105.             eval(dicOpciones[strOpcion])
  106.        
  107.            
  108.     def Ayuda(self):
  109.         print("\nUn poco de AYUDA:")
  110.         print("""
  111. <numero> - Cambia Directorio Remoto
  112. D <numero> - Descarga Archivo/Directorio Remoto
  113. CD <Directorio> - Cambia Directorio Local
  114. DIR - Listar Directorio Local Actual.
  115. Q - Termina Interactivo\n
  116.        """)
  117.  
  118.     def listarLocal(self):
  119.         for elemento in os.listdir():
  120.             if os.path.isdir(elemento):
  121.                 print("\t<DIR>", elemento)
  122.             else:
  123.                 print("\t", elemento)
  124.  
  125.     def listarRemoto(self):
  126.         if self.bolConectado:
  127.             self.lstDir = []
  128.             self.lstDirectorio = []
  129.             self.lstnlst = self.ftp.nlst()
  130.             self.ftp.dir(self.ftp.pwd(), self.lstDir.append)
  131.             for i in range(len(self.lstDir)):
  132.                 try:
  133.                     intSize = self.ftp.size(self.lstnlst[i])
  134.                     strType = "F"
  135.                 except:
  136.                     intSize = 0
  137.                     strType = "D"
  138.                 self.lstDirectorio.append([self.lstDir[i], self.lstnlst[i], strType, intSize])
  139.                 print(i,self.lstDirectorio[i][0])
  140.    
  141.     def cdRemoto(self):
  142.         pass
  143.  
  144.  

Todavía no sé como insertar la imagen :(

Mientras un ejemplo:
Código: Python
  1. objftp = clsFTP()
  2.  
  3. objftp.conecta("ftp.rediris.es", "anonymous", "guest")
  4. objftp.interactivo()
  5.  

Desconectado DtxdF

  • *
  • Moderador Global
  • Mensajes: 608
  • Actividad:
    100%
  • Reputación 15
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • Ver Perfil
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email
Hola @darkucla, me encanta que dejes códigos "al aire", así muchas personas pueden aprender.

Primero que nada, colocalo en Github, me gustaria ayudarte y Segundo, sigue leyendo para que veas cómo subir una imagen usando 'Imgurl'.

Primer paso:
    Ingresa a imgur.com/upload?beta
Segundo paso:
    Sube o arrastra una foto

Tercer paso:
    Una vez se haya subido, mueve el puntero (sin presionar) hacia la imagen que deseas subir y luego en el boton que te aparecera, dale click izquierdo (En caso de que no hayas configurado los botones del mouse para zurdos)

Cuarto paso:
    Copia el link de la imagen, si no te aparece la extensión colocasela y luego usa la etiqueta BBCODE de Underc0de para incrustar la imagen en un post


Quinto y último paso:
    Inserta la dirección y listo.

~ DtxdF
Los seres humanos son robots, cuyo combustible es el afanado dinero.

Desconectado darkucla

  • *
  • Underc0der
  • Mensajes: 9
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
@DtxdF
Gracias por tu ayuda... espero haber entendido
tengo la aplicación ksnip....


este sería el código en github
https://github.com/LuisUrbalejo/ucla.py

saludos
« Última modificación: Enero 11, 2020, 05:17:57 pm por darkucla »

Desconectado DtxdF

  • *
  • Moderador Global
  • Mensajes: 608
  • Actividad:
    100%
  • Reputación 15
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • Ver Perfil
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email
@darkucla

Excelente, cuando tenga un poco de tiempo colaboro con tu código  :D

~ DtxdF
Los seres humanos son robots, cuyo combustible es el afanado dinero.

 

[Código-Python] Code & Decode Archivo a HEX - JaAViEr

Iniciado por JaAViEr

Respuestas: 2
Vistas: 2128
Último mensaje Agosto 01, 2011, 09:35:42 pm
por JaAViEr
Goofile v1.5 - buscar un tipo de archivo específico en un dominio

Iniciado por ZanGetsu

Respuestas: 1
Vistas: 2034
Último mensaje Marzo 21, 2013, 06:51:31 pm
por Once
[Python] Identificador de tipos de archivo

Iniciado por khyv123

Respuestas: 1
Vistas: 4199
Último mensaje Julio 21, 2011, 11:27:06 am
por JaAViEr
[pyDownloader] Descargar videos de youtube y convertirlos a otro formato

Iniciado por $francisco

Respuestas: 2
Vistas: 2146
Último mensaje Junio 07, 2015, 07:49:47 am
por $francisco
[Python] Descargar Archivos - by NiKo

Iniciado por ProcessKill

Respuestas: 3
Vistas: 4700
Último mensaje Noviembre 03, 2012, 11:50:45 am
por BigBear