Foros del Web » Programando para Internet » Python »

ftplib retrlines con EOL?

Estas en el tema de ftplib retrlines con EOL? en el foro de Python en Foros del Web. Buen día, Mi problema es el siguiente, estoy tratando de descargar un archivo por medio de ftp y la funcion retrlines desde un servidor AS400 ...
  #1 (permalink)  
Antiguo 06/12/2010, 12:12
 
Fecha de Ingreso: agosto-2005
Mensajes: 15
Antigüedad: 18 años, 8 meses
Puntos: 0
Pregunta ftplib retrlines con EOL?

Buen día,

Mi problema es el siguiente, estoy tratando de descargar un archivo por medio de ftp y la funcion retrlines desde un servidor AS400 el problema es que me escribe
el archivo linealmente sin EOL, en un momento pense que era problema del servidor pero he probado con clientes ftp y los descarga normal con los saltos de línea.

Si alguien sabe agradeceria su respuesta.

Saludos
  #2 (permalink)  
Antiguo 06/12/2010, 12:25
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: ftplib retrlines con EOL?

Ábrelo como un archivo binario.

en lugar de:
Código Python:
Ver original
  1. open("Nombre del archivo", "w")
haz un
Código Python:
Ver original
  1. open("Nombre del archivo", "wb")
  #3 (permalink)  
Antiguo 06/12/2010, 13:08
 
Fecha de Ingreso: agosto-2005
Mensajes: 15
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: ftplib retrlines con EOL?

Así es como lo tengo de momento y lo deja en una sola línea todo el contenido.

Código Python:
Ver original
  1. def download(self,server_directory,remote_file,local_file=""):
  2.            
  3.             if local_file=="":
  4.                 local_file=remote_file
  5.             self.open()
  6.             self.ftp.cwd(server_directory)
  7.             self.ftp.retrlines("RETR "+remote_file, open(local_file, 'wb').write)
  8.             self.close()
  #4 (permalink)  
Antiguo 06/12/2010, 13:31
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: ftplib retrlines con EOL?

También recuerda leerlo como binario. Al leer hacer un open("nombre_del_archivo", "rb")

Por que no se que haga tu método open, pero me lo puedo imaginar.
  #5 (permalink)  
Antiguo 06/12/2010, 13:39
 
Fecha de Ingreso: agosto-2005
Mensajes: 15
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: ftplib retrlines con EOL?

esta es la clase completa
Código Python:
Ver original
  1. from ftplib import FTP 
  2.  
  3. class ftpFac():
  4.         def __init__(self,host,user,pwd):
  5.             self.host=host
  6.             self.user=user
  7.             self.pwd=pwd
  8.            
  9.         def open(self):
  10.             self.ftp =  FTP(self.host)
  11.             self.ftp.login(self.user,self.pwd)
  12.            
  13.        
  14.         def download(self,server_directory,remote_file,local_file=""):
  15.            
  16.             if local_file=="":
  17.                 local_file=remote_file
  18.             self.open()
  19.             self.ftp.cwd(server_directory)
  20.             self.ftp.retrlines("RETR "+remote_file, open(local_file, 'wb').write)
  21.             self.close()
  22.        
  23.         def close(self):
  24.             self.ftp.quit()


pero cuando open al archivo y quiero hacer un readline como no descarga con EOL lee todo el archivo como si fuese una sola línea y pues los archivos con los que pretendo trabajar si bien no son grandes no son tan pequeños (aprox unos 800 mb)
  #6 (permalink)  
Antiguo 06/12/2010, 14:01
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: ftplib retrlines con EOL?

Código Python:
Ver original
  1. from ftplib import FTP    
  2.  
  3. class ftpFac():
  4.         def __init__(self,host,user,pwd):
  5.             self.host = host
  6.             self.user = user
  7.             self.pwd = pwd
  8.            
  9.         def open(self):
  10.             self.ftp =  FTP(self.host)
  11.             self.ftp.login(self.user, self.pwd)
  12.        
  13.         def download(self, server_directory, remote_file, local_file=""):
  14.             if not local_file:
  15.                 local_file = remote_file
  16.             self.open()
  17.             self.ftp.cwd(server_directory)
  18.             self.ftp.retrbinary("RETR " + remote_file, open(local_file, 'wb').write)
  19.        
  20.         def close(self):
  21.             self.ftp.quit()
  22.  
  23. f = ftpFac("host_here", "username_here", "password_here")
  24. f.open()
  25. f.download("path", "filename")
  26. f.close()
  #7 (permalink)  
Antiguo 06/12/2010, 14:06
 
Fecha de Ingreso: agosto-2005
Mensajes: 15
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: ftplib retrlines con EOL?

Si claro entiendo su funcionamiento yo hice esa clase
y descarga perfecto lo unico que cuando hago
Código Python:
Ver original
  1. file=open("file_name","rb")
  2. line=file.readline()

al no haber un EOL lee todo (en este caso 800 mb ) de una vez cargando todo a la memoria y alli ya tengo problemas con eso.
  #8 (permalink)  
Antiguo 06/12/2010, 14:16
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: ftplib retrlines con EOL?

Tal vez te interese ponerle un tamaño, lee la documentación para mas información.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:03.