Foros del Web » Programando para Internet » Python »

Leer una línea en concreto

Estas en el tema de Leer una línea en concreto en el foro de Python en Foros del Web. Cuando leo un archivo en python con .read, me muestra tooodo el documento. ¿Cómo podría hacer para leer una línea en concreto y guardarla en ...
  #1 (permalink)  
Antiguo 11/04/2011, 16:59
 
Fecha de Ingreso: abril-2011
Mensajes: 9
Antigüedad: 13 años, 7 meses
Puntos: 2
Leer una línea en concreto

Cuando leo un archivo en python con .read, me muestra tooodo el documento. ¿Cómo podría hacer para leer una línea en concreto y guardarla en una variable?

Ejemplo: Quiero leer la línea 3 del documento.

Documento:

Código:
Pepe Pérez Fernández
Técnico Superior Agrícola
C/ Falsa 123
Entonces me gustaría que guardara la 3ª línea en una variable.

Dirección = "C/ Falsa 123"

Gracias a todos, me estáis ayudando mucho :)
  #2 (permalink)  
Antiguo 11/04/2011, 19:59
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Leer una línea en concreto

¿Que llevas hecho hasta ahora?
¿Has usado readlines en lugar de read?
¿Has usado el método slipt con cadenas?
  #3 (permalink)  
Antiguo 12/04/2011, 06:06
 
Fecha de Ingreso: abril-2011
Mensajes: 9
Antigüedad: 13 años, 7 meses
Puntos: 2
Respuesta: Leer una línea en concreto

Gracias razpeitia!

Al principio no entendí porque me dijiste lo del split pero al ver que el readlines muestra todas las líneas separadas por comas, lo entendí :) Lo probé con el ejemplo del doc anterior y me sirvió (tuve que convertir a string el readlines que sino me saba error) y funcionó!

Ahora viene otro problema:

Si en vez de ser el documento como antes, fuera así:

Código:
Pepe Pérez Fernández
Técnico Superior Agrícola
C/ Falsa 123, Urano
Ya no funciona porque en la tercera línea hay una "coma" en la dirección y al mostrar la tercera línea, no muestra "Urano" es decir que se queda hasta la coma.

El problema está en que el documento es un parámetro que le paso y que cada vez es uno y no puedo cambiar las comas por otro simbolo, sabes como hacer para que lea las líneas enteras sin que se pare en las comas de la propia linea?

Mi código que funciona si no hay comas en medio de la línea es este:

Código Python:
Ver original
  1. f = open('doc.txt', 'r')
  2.  
  3. lineaentera = f.readlines()
  4.  
  5. lineaentera = str(lineaentera)
  6.  
  7. linea3 = lineaentera.split(",")[2]
  8.  
  9. print linea3
  #4 (permalink)  
Antiguo 12/04/2011, 06:43
 
Fecha de Ingreso: febrero-2011
Mensajes: 32
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Leer una línea en concreto

Hola pipipython.
Al método split se le puede o no pasar argumento para que divida a la cadena por el mismo, por defecto el argumento para separar es el espacio.
Si vos le pasas como argumento el fin de línea ("\n") en lugar de la coma (",") creo que estaría solucionado el problema de que te separa las comas que no deseas.
Ej:
Si usas read la cadena quedaría guardada de la siguiente manera:

cadena = "Pepe Pérez Fernández\nTécnico Superior Agrícola\nC/ Falsa 123, Urano"
lineaentera = cadena.split("\n")
lineaentera = ["Pepe Pérez Fernández","Técnico Superior Agrícola","C/ Falsa 123, Urano"]
Luego si haces:
lineaentera[2] = "C/ Falsa 123, Urano"

O sea, sería:

cadena = open("doc.txt","r").read()
linea3 = cadena.split("\n")[2]

Espero que te sirva, saludos!.

PD: disculpas si hay algún error, hace poco empece a estudiar python. Creo que eso andaría pero tal vez hay alguna solución "mejor" a tu problema.
  #5 (permalink)  
Antiguo 12/04/2011, 07:10
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Leer una línea en concreto

Código Python:
Ver original
  1. with open("temp.txt", "r") as f:
  2.     lineas = f.readlines()
  3.     print lineas[2]
  4.  
  5. with open("temp.txt", "r") as f:
  6.     text = f.read()
  7.     lineas = text.split("\n")
  8.     print lineas[2]
  9.  
  10. with open("temp.txt", "r") as f:
  11.     for i, linea in enumerate(f, start=1):
  12.         if i == 3:
  13.             print linea
  14.             break
  15.  
  16.  
  17. with open("temp.txt", "r") as f:
  18.     next(f)
  19.     next(f)
  20.     print next(f)

Bueno, aquí hay al menos 4 maneras diferentes de leer la tercera linea de un archivo. (Claro obvia sin validar nada)
  #6 (permalink)  
Antiguo 12/04/2011, 08:01
 
Fecha de Ingreso: abril-2011
Mensajes: 9
Antigüedad: 13 años, 7 meses
Puntos: 2
Respuesta: Leer una línea en concreto

Ohh! Sencillamente perfecto, más simple que lo mio y más claro :)

Gracias de nuevo razpeitia ;)

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 04:35.