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

  • 3 Respuestas
  • 413 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.  

Conectado DtxdF

  • *
  • Moderador Global
  • Mensajes: 682
  • Actividad:
    100%
  • Reputación 16
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • Ver Perfil
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email
Hola @You are not allowed to view links. Register or Login, 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
@You are not allowed to view links. Register or Login
Gracias por tu ayuda... espero haber entendido
tengo la aplicación ksnip....


este sería el código en github
You are not allowed to view links. Register or Login

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

Conectado DtxdF

  • *
  • Moderador Global
  • Mensajes: 682
  • Actividad:
    100%
  • Reputación 16
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • Ver Perfil
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email
@You are not allowed to view links. Register or Login

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: 2146
Ú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: 2041
Último mensaje Marzo 21, 2013, 06:51:31 pm
por Once
[Python] Identificador de tipos de archivo

Iniciado por khyv123

Respuestas: 1
Vistas: 4263
Ú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: 2173
Último mensaje Junio 07, 2015, 07:49:47 am
por $francisco
[Python] Descargar Archivos - by NiKo

Iniciado por ProcessKill

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