Python - Comodines en python

 
Vista:

Comodines en python

Publicado por Cristina (2 intervenciones) el 05/09/2017 17:56:53
Buenas tardes,
¿alguien podria ayudarme con los comodines o expresiones regulares en python?
Mi codigo es el siguiente.
1
2
3
4
5
6
7
8
9
10
11
validos=[['1/0','1/1','1/0','1/1']]
 
fil=open(sys.argv[1])
fo=open(sys.argv[2], "w")
for line in fil:
        if line[0].startswith('#'):
                fo.write(line)
        if [x.split(":")[0] for x in line.strip().split('\t')[9:13] in validos:
                print >>fo, line.strip()
fil.close()
fo.close()

este codigo funciona bien, pero necesito añadir en validos una columna entre medias, y decirle que puede ser cualquier numero, es decir, lo que en bash podríamos decirle de esta manera con un simple asterisco.
validos=[['1/0','*/*','1/1','1/0','*/*','1/1']]

He probado con el modulo re, pero no me aclaro.
¿Alguna ayuda?
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 kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Comodines en python

Publicado por kip (257 intervenciones) el 06/09/2017 14:31:40
Hola, tu codigo en esta parte no lo termino de entender, creo que lo pegaste mal:

1
2
if [x.split(":")[0] for x in line.strip().split('\t')[9:13] in validos:
                print >>fo, line.strip()

Haces una compresión de lista en el if pero no veo donde termines esta.... puedes decirnos si esta correcto el codigo ?
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

Comodines en python

Publicado por Cristina (2 intervenciones) el 06/09/2017 16:18:08
Si perdona, me falta cerrarlo.
Este es el correcto

1
2
3
4
5
6
7
8
9
10
validos=[['1/0','1/1','1/0','1/1']]
fil=open(sys.argv[1])
fo=open(sys.argv[2], "w")
for line in fil:
        if line[0].startswith('#'):
                fo.write(line)
        if [x.split(":")[0] for x in line.strip().split('\t')[9:13]] in validos:
                print >>fo, line.strip()
fil.close()
fo.close()
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 kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Comodines en python

Publicado por kip (257 intervenciones) el 07/09/2017 03:27:28
Te refieres con esto

1
validos=[['1/0','*/*','1/1','1/0','*/*','1/1']]

A que tome cualquier numero no ? Pero si es cualquier numero porque entonces colocar los demas valores estaticos como 1/0 ?

Debes tener en cuenta tambien que lo que haces aqui

1
if [x.split(":")[0] for x in line.strip().split('\t')[9:13]] in validos:

Es un in, que como te imaginas comprueba que exista un valor dentro de otro, en este caso valores de listas, no funcionarían las expresiones regulares en la forma que esta actualmente, quizás debas cambiar la evaluación en esta parte, podrías colocar valores de ejemplo que pueda resulta de la compresión de lista que haces en el if anterior ?
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