Solucionado [python] Salto de linea en lectura de fichero

Iniciado por tonilogar, 26 Noviembre 2010, 00:28 AM

0 Miembros y 1 Visitante están viendo este tema.

tonilogar

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 (python) [Seleccionar]
#Creo una lista vacía
lista_iad=[]

#Abro el fichero y añado a la lista_iad
>>> with open("bloc5C.iad",encoding="utf-8") as fichero_iad:
for line in fichero_iad:
lista_iad.append(line[2:10]+".msk")

>>> lista_iad
['10,X,A) .msk', '81680775.msk', '81680773.msk', '81680771.msk', '81680769.msk', '81680767.msk']



Un saludo y gracias por vuestro tiempo.
No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.

tonilogar

#1
Bueno lo arreglo con una chapuza:
Borro el primer valor de la lista.
Pero no es muy ortodoxo que digamos ¿no?

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

>>> del lista_iad [0]
>>> lista_iad
['81680775.msk', '81680773.msk', '81680771.msk', '81680769.msk', '81680767.msk']


Un saludo y gracias por vuestro tiempo.
No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.

Novlucker

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

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

tonilogar

Gracias Novlucker este fin de semana me empollo la información.

Perdón por preguntas tan obvias pero mi ingles es very orribilososus
No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.

tonilogar

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.

No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.

Novlucker

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

tonilogar

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']
No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.