Foros del Web » Programando para Internet » Python »

necesito ayuda leyendo archivo txt

Estas en el tema de necesito ayuda leyendo archivo txt en el foro de Python en Foros del Web. tengo este archivo con estos datos : v -10.0000 0.0000 10.0000 v -10.0000 0.0000 -10.0000 v 10.0000 0.0000 -10.0000 v 10.0000 0.0000 10.0000 v -10.0000 ...
  #1 (permalink)  
Antiguo 19/01/2011, 16:37
 
Fecha de Ingreso: diciembre-2010
Mensajes: 162
Antigüedad: 13 años, 3 meses
Puntos: 1
Pregunta necesito ayuda leyendo archivo txt

tengo este archivo con estos datos :

v -10.0000 0.0000 10.0000
v -10.0000 0.0000 -10.0000
v 10.0000 0.0000 -10.0000
v 10.0000 0.0000 10.0000
v -10.0000 20.0000 10.0000
v 10.0000 20.0000 10.0000
v 10.0000 20.0000 -10.0000
v -10.0000 20.0000 -10.0000
# 8 vertices


y este es mi programa
Código Python:
Ver original
  1. import string
  2.  
  3. class Mallaobj:
  4.     def __init__(self):
  5.         self.vertices=[]
  6.         self.vertices2=[]
  7.         self.normales=[]
  8.         self.coortex=[]
  9.         self.caras=[]
  10.     def Abrirobj(self, filename):
  11.    
  12.         f=open(filename,"r")
  13.         lineas=f.readlines()
  14.        
  15.         f.close()
  16.         for line in lineas:
  17.           valores=string.split(line)              
  18.           if len(valores) < 1:
  19.                  continue
  20.        
  21.           if valores[0] == 'v':
  22.                     x = float (valores[1])
  23.                     y = float(valores[2])
  24.                     z = float(valores[3])
  25.                     self.vertices.append([x,y,z])
  26.                     print "los valores de vertices:",x,y,z  
  27.          
  28.  
  29. a=Mallaobj()
  30. a.Abrirobj("CUBO.obj")

el problemas es que me lee de esta forma:


los valores de vertices: -10.0 0.0 10.0
los valores de vertices: -10.0 0.0 -10.0
los valores de vertices: 10.0 0.0 -10.0
los valores de vertices: 10.0 0.0 10.0
los valores de vertices: -10.0 20.0 10.0
los valores de vertices: 10.0 20.0 10.0
los valores de vertices: 10.0 20.0 -10.0
los valores de vertices: -10.0 20.0 -10.0

y lo ke keria es leer una sola fila como por ejemplo -10 0.0 y 10.0 para poder asignarle una variable y no se como hacer para leer cada linea en vez de todas las lineas. tendre que quietar el for? gracias espero alguna respuesta

Última edición por AlvaroG; 20/01/2011 a las 10:59 Razón: resaltado de código
  #2 (permalink)  
Antiguo 20/01/2011, 11:03
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: necesito ayuda leyendo archivo txt

Para leer una sola línea usá readline.
No entiendo cuál es tu objetivo, de todas formas dada la forma en la que estás leyendo el archivo, perfectamente podés acceder a la primera línea via lineas[0].

Saludos.
  #3 (permalink)  
Antiguo 20/01/2011, 22:53
 
Fecha de Ingreso: diciembre-2010
Mensajes: 162
Antigüedad: 13 años, 3 meses
Puntos: 1
De acuerdo Respuesta: necesito ayuda leyendo archivo txt

mi objetivo era leer un archivo obj. del 3ds max, porque tengo un modelo y kiero ver como cargar el modelo en opengl. y esos eran datos del modelo. hey cuando le pongo readline() a ese archivo me tira error me dice que list index out of range, no entiendo porke fuera de rango la lista o algo asi.
  #4 (permalink)  
Antiguo 21/01/2011, 06:28
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: necesito ayuda leyendo archivo txt

Bien, queda claro el motivo, pero no queda claro cómo querés leer el archivo. Esa era mi duda, y admito que tendría que haber aclarado mi pregunta. ¿querés leer línea por línea, o querés leer una línea específica? Porque en tu código original estás iterando con el for sobre las líneas del archivo, que ya leíste antes con readlines()

Hay un par de cositas en tu código que si bien no son errores, no son tampoco las formas recomendadas de hacer las cosas en Python, pero primero resolvamos el problema y luego te las indicaré.

Con respecto al error que te da Python, hay que ver el código exacto que lo genera, quizás no estás usando bien la función.


Saludos.
  #5 (permalink)  
Antiguo 21/01/2011, 08:00
 
Fecha de Ingreso: diciembre-2010
Mensajes: 162
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: necesito ayuda leyendo archivo txt

mi idea es leer una fila que tenga asociado x, y, zy luego usar esa x y z como coordenadas en opengl o sea leer v 10 0 10 y ke 10 sea x 0 sea y y 10 sea z
luego la otra linea por ejemplo v 10 0 0 que 10 sea x 0 sea y, y 0 sea z. me entendes ahora?
  #6 (permalink)  
Antiguo 21/01/2011, 08:36
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: necesito ayuda leyendo archivo txt

Si, te entiendo, pero ¿no es eso lo que estás haciendo con el for? ¿no bastaría con hacer lo que sea que quieras hacer con los datos leídos dentro del bloque for?
  #7 (permalink)  
Antiguo 21/01/2011, 08:48
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: necesito ayuda leyendo archivo txt

Cita:
Iniciado por poeta3d Ver Mensaje
tengo este archivo con estos datos :

v -10.0000 0.0000 10.0000
v -10.0000 0.0000 -10.0000
v 10.0000 0.0000 -10.0000
v 10.0000 0.0000 10.0000
v -10.0000 20.0000 10.0000
v 10.0000 20.0000 10.0000
v 10.0000 20.0000 -10.0000
v -10.0000 20.0000 -10.0000
# 8 vertices


y este es mi programa
Código Python:
Ver original
  1. import string
  2.  
  3. class Mallaobj:
  4.     def __init__(self):
  5.         self.vertices=[]
  6.         self.vertices2=[]
  7.         self.normales=[]
  8.         self.coortex=[]
  9.         self.caras=[]
  10.     def Abrirobj(self, filename):
  11.    
  12.         f=open(filename,"r")
  13.         lineas=f.readlines()
  14.        
  15.         f.close()
  16.         for line in lineas:
  17.           valores=string.split(line)              
  18.           if len(valores) < 1:
  19.                  continue
  20.        
  21.           if valores[0] == 'v':
  22.                     x = float (valores[1])
  23.                     y = float(valores[2])
  24.                     z = float(valores[3])
  25.                     self.vertices.append([x,y,z])
  26.                     print "los valores de vertices:",x,y,z  
  27.          
  28.  
  29. a=Mallaobj()
  30. a.Abrirobj("CUBO.obj")

el problemas es que me lee de esta forma:


los valores de vertices: -10.0 0.0 10.0
los valores de vertices: -10.0 0.0 -10.0
los valores de vertices: 10.0 0.0 -10.0
los valores de vertices: 10.0 0.0 10.0
los valores de vertices: -10.0 20.0 10.0
los valores de vertices: 10.0 20.0 10.0
los valores de vertices: 10.0 20.0 -10.0
los valores de vertices: -10.0 20.0 -10.0

y lo ke keria es leer una sola fila como por ejemplo -10 0.0 y 10.0 para poder asignarle una variable y no se como hacer para leer cada linea en vez de todas las lineas. tendre que quietar el for? gracias espero alguna respuesta
Has intentado:
Código Python:
Ver original
  1. print self.vertices
después del for.

Aquí tu código. (Modificado por mi)
Código Python:
Ver original
  1. class Mallaobj:
  2.     def __init__(self):
  3.         self.vertices = []
  4.         self.vertices2 = []
  5.         self.normales = []
  6.         self.coortex = []
  7.         self.caras = []
  8.        
  9.     def Abrirobj(self, filename):
  10.         f = open(filename, "r")
  11.         lineas = f.readlines()
  12.        
  13.         f.close()
  14.         for line in lineas:
  15.             valores = line.split()              
  16.             if len(valores) < 1 or valores[0] != 'v':
  17.                 continue
  18.             x = float(valores[1])
  19.             y = float(valores[2])
  20.             z = float(valores[3])
  21.             self.vertices.append((x,y,z))
  22.             print "los valores de vertices:", x, y, z
  23.         print "la lista de todos los vertices:", self.vertices  
  24.          
  25.  
  26. a = Mallaobj()
  27. a.Abrirobj("CUBO.obj")

No estaría de mas que te le leyeras el PEP8 o mejor conocido como "Style Guide for Python"

Etiquetas: leyendo, txt
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 17:21.