Python - Separar de un archivo los valores que empiezan por numeros

 
Vista:

Separar de un archivo los valores que empiezan por numeros

Publicado por Natalia (7 intervenciones) el 30/05/2013 21:46:30
Buenas tardes, tengo un problema con python y me gustaria saber si alguien me puede ayudar..

Tengo un fichero enorme en el que el cabecero ocupa varias lineas, ademas de tener una parte final de resumen. Entre ambas partes, hay unas lineas que quiero recuperar en otro fichero distinto...
El cabecero empieza por letras o simbolos, y la zona que quiero todas empiezan por numeros..

¿Alguna solucion?

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Separar de un archivo los valores que empiezan por numeros

Publicado por xve (1646 intervenciones) el 31/05/2013 08:04:00
Hola Natalia, no nos muestras esa cabecera a la que haces referencia, pero podrías utilizar expresiones regulares para determinar cuando es solo números.

Si nos muestra parte del archivo para poder entender y mostrarte un ejemplo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Separar de un archivo los valores que empiezan por numeros

Publicado por natalia (7 intervenciones) el 31/05/2013 11:47:16
La parte del cabecero empieza así

ID_REF..........
! AP_-.........
#LK__
.....
Serán unas 40 líneas así, alternando símbolos y letras mayúsculas

La parte que me interesa es:

12354.....
1421......
25487.....
65878....

otras 40 lineas más o menos


y por ultimo tiene otra parte que no me interesa, en la cual todas las lineas empiezan por

AFF_PP

y queria recuperar todas las lineas que empiezan por números en un fichero nuevo

Sé que se puede hacer por expresiones regulares, pero al escribir el código no me sale nada....


Yo lo que he hecho es usar readlines para leer el fichero linea a linea, y ahora tenia pensado escribir un bucle, que me fuera leyendo linea a linea y dependiendo de por qué empezara la linea, copiarla a un fichero nuevo o continuar leyendo sin hacer nada, lo que me pasa es que al escribir el código no lo hago bien, no se me ejecuta correctamente...

Si me pudieras ayudar te lo agradecería!!!
un saludo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Separar de un archivo los valores que empiezan por numeros

Publicado por xve (1646 intervenciones) el 31/05/2013 13:04:03
Hola Natalia, creo que seria algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import re
 
# leemos el archivo original
f=file("file.txt", "r")
content=f.read().splitlines()
f.close()
 
# creamos el archivo destino
f=file("newfile.txt","w")
 
# recorermos todas las lineas del archivo original
for line in content:
    # comprobamos que empieze por un numero
    if re.match("^[0-9]",line):
        # guardamos la linea en el nuevo fichero
        f.write(line+"\n")
 
f.close()

Para mi ejemplo, file.txt contiene:
1
2
3
4
5
6
7
ID_REF..........
! AP_-.........
#LK__
12354.....
1421......
25487.....
65878....

El fichero resultante newfile.txt contiene:
1
2
3
4
12354.....
1421......
25487.....
65878....


Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Separar de un archivo los valores que empiezan por numeros

Publicado por Natalia (7 intervenciones) el 31/05/2013 13:37:59
Muchas gracias!! me ha devuelto lo que quería!!
Ahora tengo este fichero:
1007_s_at DDR1 null null null null
1053_at RFC2 null null null null
117_at HSPA6 null null null null
121_at PAX8 8.246 8.221 8.022 8.782
1255_g_at GUCA1A null null null null
1294_at UBA7 null null null null
1316_at THRA null null null null
1320_at PTPN21 null null null null
1405_i_at CCL5 null null null null
1431_at CYP2E1 null null null null
1438_at EPHB3 null null null null
1487_at ESRRA 8.606 8.513 8.409 8.905
1494_f_at CYP2A6 null null null null


si ahora quisiera quitar todas las lineas que tuvieran "null" al menos una vez...¿Tengo que hacer lo mismo que antes?


Muchisimas gracias de antemano, me estas ayudando un monton, te lo agradezco
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Separar de un archivo los valores que empiezan por numeros

Publicado por xve (1646 intervenciones) el 31/05/2013 14:53:36
Con un simple condicional creo que te valdría...
1
2
if null in line:
    print "existe null"


Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Separar de un archivo los valores que empiezan por numeros

Publicado por Natalia (7 intervenciones) el 31/05/2013 15:12:46
Ya conseguí la primera parte!! que era depurar los datos, muchisisimas gracias!!

pero ahora tengo otro problema....lo siento si soy un poco pesada....
El problema de ahora es tontisimo, ya lo e echo estas cosas mas veces, pero creo que tengo un dia de esos q no sale nada...

ya tengo mi fichero con los datos depurados. Algo asi:
['121_at', 'PAX8', '8.246' '8.221', '8.022', '8.782\n']
['1487_at', 'ESRRA', '8.606', '8.513', '8.409', '8.905\n']
['1552257_a_at', 'TTLL12', '10.092', '10.054', '9.938', '10.198\n']
['1552264_a_at', 'MAPK1', '9.193', '9.151', '8.957', '8.667\n']
['1552279_a_at', 'SLC46A1', '6.659', '6.61', '6.425', '7.06\n']
['1552291_at', 'PIGX', '9.355', '10.095', '10.045', '9.064\n']
....

Ahora necesito coger la primera columna de numeros de cada linea ( es decir, 8.246, 8.606, 10.902, 9.193, 6.659, 9.355...) y calcular la media


Se que es una bobada, pero al estar el fichero en forma de lista, cuando quiero acceder a la columna 2 que sería la que me interesa, me da error...y no se como ponerlo para poder hacerlo



Gracias, gracias y mil gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Separar de un archivo los valores que empiezan por numeros

Publicado por Natalia (7 intervenciones) el 31/05/2013 21:03:48
hola! por favor, necesito una ultima ayuda....

Ya tengo mi fichero con los datos depurados: y es algo así:
['121_at', 'PAX8', '8.246' '8.221', '8.022', '8.782\n']
['1487_at', 'ESRRA', '8.606', '8.513', '8.409', '8.905\n']
['1552257_a_at', 'TTLL12', '10.092', '10.054', '9.938', '10.198\n']
['1552264_a_at', 'MAPK1', '9.193', '9.151', '8.957', '8.667\n']
['1552279_a_at', 'SLC46A1', '6.659', '6.61', '6.425', '7.06\n']
['1552291_at', 'PIGX', '9.355', '10.095', '10.045', '9.064\n']

abro mi fichero y lo leo
f = open("final.fasta","r")
lineas = f.readlines()

si yo pongo lineas[1] me da ['121_at', 'PAX8', '8.246' '8.221', '8.022', '8.782\n']
y lineas[0] = [
una vez que tengo lineas[1], si intento acceder al elemento numero 2, que seria 8.246, lo que obtengo es un 1....
no sé como solucionar el error y obtener todos los resultados correspondientes a la columna 2 del archivo...

Necesito que alguien me ayude porfavor!!
Gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Separar de un archivo los valores que empiezan por numeros

Publicado por xve (1646 intervenciones) el 01/06/2013 09:48:32
Hola Natalia como intentas acceder...
si lines contiene todas las listas, algo así:
1
2
3
4
5
6
7
8
lineas=[
['121_at', 'PAX8', '8.246' '8.221', '8.022', '8.782\n']
['1487_at', 'ESRRA', '8.606', '8.513', '8.409', '8.905\n']
['1552257_a_at', 'TTLL12', '10.092', '10.054', '9.938', '10.198\n']
['1552264_a_at', 'MAPK1', '9.193', '9.151', '8.957', '8.667\n']
['1552279_a_at', 'SLC46A1', '6.659', '6.61', '6.425', '7.06\n']
['1552291_at', 'PIGX', '9.355', '10.095', '10.045', '9.064\n']
]

sería:
1
print lineas[1][2]

tendría que devolverte: 8.606

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Separar de un archivo los valores que empiezan por numeros

Publicado por Natalia (7 intervenciones) el 01/06/2013 10:54:54
que va...ya lo pobre ayer, pero me devuelve 1
es que me ha dividido la cadena en caracteres, no me reconoce una variable lo que hay dentro de las comillas...esto fue lo que hice:

1
2
3
4
5
6
7
8
9
10
11
fichero = open("ficherosalida.fasta", 'r')
lineas = fichero.read().splitlines()
fichero.close()
 
ficherodetrabajo = file("final.fasta", "w")
 
 
for line in lineas:
	modificado = string.split(line, '\t')
	if modificado[2] != "null":
		ficherodetrabajo.write(str(modificado)+"\n")


Con estas lineas de programación depuré el archivo previamente depurado, y elimine todas aquellas entradas que tuvieras "null" en la columna de resultados (ya que tengo que hacer la media y estos valores son descartados)
Esto lo conseguí, pero no sé si es la mejor forma de hacerlo, porque ahora simplemente sumarlos todos como te comente antes y calcular la media me da error lo haga como lo haga, y lo he estado probando poco a poco en ipython y veo que hay un error en algun lado que no consigo ver....
gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar