Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: tonilogar en 26 Noviembre 2010, 00:28 am



Título: Solucionado [python] Salto de linea en lectura de fichero
Publicado por: tonilogar en 26 Noviembre 2010, 00:28 am
Quiero hacer una lista con los datos de un fichero *.txt
Los únicos datos que me interesan son los dígitos del 2 al 10 de cada linea (los que están en negrita).

Pero la primera linea del fichero no me interesa.
¿Como se salta una linea?...
Tengo entendido que es con "\n"....pero he intentado todas las combinaciones inimaginables y na de na.

Este es el contenido del txt:

(I10,X,A)                          

  81680775 2009242021570722HR4.tif                          

  81680773 2009242021570721HR4.tif                          

  81680771 2009242021570720HR4.tif                          

  81680769 2009242021570719HR4.tif                          

  81680767 2009242021570718HR4.tif



Código
  1. #Creo una lista vacía
  2. lista_iad=[]
  3.  
  4. #Abro el fichero y añado a la lista_iad
  5. >>> with open("bloc5C.iad",encoding="utf-8") as fichero_iad:
  6. for line in fichero_iad:
  7. lista_iad.append(line[2:10]+".msk")
  8.  
  9. >>> lista_iad
  10. ['10,X,A) .msk', '81680775.msk', '81680773.msk', '81680771.msk', '81680769.msk', '81680767.msk']


Un saludo y gracias por vuestro tiempo.


Título: Re: [python] Salto de linea en lectura de fichero
Publicado por: tonilogar en 26 Noviembre 2010, 01:00 am
Bueno lo arreglo con una chapuza:
Borro el primer valor de la lista.
Pero no es muy ortodoxo que digamos ¿no?

Código
  1. #Abro el fichero y añado a la lista_iad
  2. >>> with open("bloc5C.iad",encoding="utf-8") as fichero_iad:
  3.   for line in fichero_iad:
  4.      lista_iad.append(line[2:10]+".msk")
  5. >>> lista_iad
  6. ['10,X,A) .msk', '81680775.msk', '81680773.msk', '81680771.msk', '81680769.msk', '81680767.msk']
  7.  
  8. >>> del lista_iad [0]
  9. >>> lista_iad
  10. ['81680775.msk', '81680773.msk', '81680771.msk', '81680769.msk', '81680767.msk']

Un saludo y gracias por vuestro tiempo.


Título: Re: [python] Salto de linea en lectura de fichero
Publicado por: Novlucker en 26 Noviembre 2010, 13:44 pm
http://docs.python.org/library/fileinput.html#fileinput.isfirstline :P

Aunque no me parece tan chapuza quitar la primera línea, de hecho, me parece menos chapuza que utilizar el índice absoluto para obtener lo que hay que procesar (line[2:10]), si intentas con expresiones regulares? :P

Saludos



Título: Re: [python] Salto de linea en lectura de fichero
Publicado por: tonilogar en 26 Noviembre 2010, 19:10 pm
Gracias Novlucker este fin de semana me empollo la información.

Perdón por preguntas tan obvias pero mi ingles es very orribilososus


Título: Re: [python] Salto de linea en lectura de fichero
Publicado por: tonilogar en 17 Diciembre 2010, 01:49 am
Pues estoy con las expresiones regulares. Y mas o menos las voy pillando .
Pero no se como colarlas para que me añada el texto con el filtro a la lista.

En principio la expresión regular seria una de estas dos a gusto.

r"\b8.......\b"   # un string que empieza por 8+siete dígitos.
r"\b8\d{7}\b"  # un string que empieza por 8+siete dígitos numéricos.

He probado con pattern y search pero no me aclaro.

Un saludo y gracias por vuestro tiempo.

Y sigo con la expresiones regulares que tienen miga.



Título: Re: [python] Salto de linea en lectura de fichero
Publicado por: Novlucker en 17 Diciembre 2010, 11:12 am
findall :D

Saludos


Título: Re: [python] Salto de linea en lectura de fichero
Publicado por: tonilogar en 26 Diciembre 2010, 01:28 am
Gracias  Novlucker.

Gracias a tu ayuda y un amigo pythoniano he comprendido  mejor el modulo re
Aquí esta la solución:

>>> patron = re.compile(r"\b8.......\b")
>>> with open("bloc5C.iad",encoding="utf-8") as file_iad:
   lines = file_iad.read()
   coincidencias = patron.findall(lines)
>>> coincidencias
['81460710', '81460709', '81460708', '81460707']