Python - Imprimir parte del texto en color

 
Vista:
Imágen de perfil de Pepe
Val: 33
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Imprimir parte del texto en color

Publicado por Pepe (16 intervenciones) el 31/05/2017 21:01:35
Hola a todos y gracias de antemano.

Me gustaría saber si hay alguna forma de imprimir parte de texto de un color diferente utilizando python. Me explico.

Quiero ir imprimiendo una serie de textos en la pantalla y si alguna de las palabras del texto coincide con alguna palabra de las que tengo en una lista, que está se imprima en rojo.

En una lista tengo 'Madrid, Barcelona, sevilla'

Al imprimir la frase: 'Ayer me fui de paseo por madrid'

Me gustaría que la palabra Madrid se viera en color rojo.
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

Imprimir parte del texto en color

Publicado por kip (257 intervenciones) el 31/05/2017 21:27:41
Hola, he hecho algo a ver si te sirve:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import re
 
RED = '\033[1;31m'
NOCOLOR = '\033[0;0m'
 
palabras = ['Madrid', 'Barcelona', 'jueves']
frases = ['Ayer me fui de paseo por Madrid', 'Hoy es miercoles', 'Mañana es jueves']
 
for frase in frases:
    aImprimir = frase
    for palabra in palabras:
        if palabra in frase:
            aImprimir = re.sub(r'(%s)' % palabra, r'%s\1%s' % (RED, NOCOLOR), frase)
            break
    print(aImprimir)

2170fbcef6cd40eda40aa31295cfa52e

Es lo que buscas ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de Pepe
Val: 33
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Imprimir parte del texto en color

Publicado por Pepe (16 intervenciones) el 31/05/2017 21:46:28
Muchísimas gracias. Justo eso es lo que buscaba. Yo creo que me funcionara perfecto. Mil gracias de nuevo.
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
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Imprimir parte del texto en color

Publicado por tincopasan (1082 intervenciones) el 01/06/2017 05:51:13
también viene una biblioteca llamada colorama que hace esto mucho más fácil!
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 Pepe
Val: 33
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Imprimir parte del texto en color

Publicado por Pepe (16 intervenciones) el 01/06/2017 12:04:28
Hola de nuevo.
Le he echado un vistazo a colorama, pero la verdad es que no encuentro como hacerlo con ella, ademas del incoveniente de tener que contar con la libreria instalada. Eso unido a que soy nuevo en esto de python, se me hace mas cuesta arriba.

En cuanto al metodo que me propuso kip, funciona fenomenal pero solo parcialmente. Si en una frase tengo mas de una palabra que cumple el criterio solo me colorea una:
2017-06-01_114928

Por otro lado cuando filtros las frases por las palabras que necesito,con el metodo que uso tambien me reconoce parte de ellas como buenas, me explico, si busco la palabra 'tren' y en la frase esta la palabra 'trenza' o 'encuentren', y me gustaria que solo encontrara la palabra exacta.

Lo estoy haciendo asi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
lista = ['madrid','tren','barcelona','coche']
 
 
 
dict = {}
 
for item in lista:
 
    dict[item] = True
 
 
 
ocurrencias = []
 
 
 
with open('texto2.txt') as lineas:
 
    for linea in lineas:
 
        for w in dict:
 
            if w in linea:
 
                ocurrencias.append(linea)
 
 
 
for frase in ocurrencias:
 
    aImprimir = frase
 
    for palabra in dict:
 
        if palabra in frase:
 
            aImprimir = re.sub(r'\b(%s)\b' % palabra, r'%s\1%s' % (RED, NOCOLOR), frase)
 
            break
 
    print (aImprimir)


Seguro que el codigo se puede mejorar mucho, pero como he dicho soy nuevo en esto.
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 Pepe
Val: 33
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Imprimir parte del texto en color

Publicado por Pepe (16 intervenciones) el 01/06/2017 18:28:56
Cosas de novatos......He conseguido reducir bastante el codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import re
 
RED = '\033[1;31m'
NOCOLOR = '\033[0;0m'
 
lista = ['madrid','tren','barcelona','coche']
 
dict = {}
 
for item in lista:
 
    dict[item] = True
 
ocurrencias = []
 
with open('texto2.txt') as lineas:
 
     for linea in lineas:
 
        for w in dict:
 
            if w in linea:
 
                aImprimir = re.sub(r'\b(%s)\b' % w, r'%s\1%s' % (RED, NOCOLOR), linea)
            	break
        print (aImprimir)


Ya no se me duplican las lineas. pero sigo sin conseguir la busqueda de la palabra exacta y colorear todas las palabras de la frase que coincidadn con los terminos, (aunque esto seria un mal menor)
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 Pepe
Val: 33
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Imprimir parte del texto en color

Publicado por Pepe (16 intervenciones) el 01/06/2017 20:03:17
Bueno ya va mejorando esto. Ya encuentro las palabras exactas mediante expresiones regulares y no duplico la linea gracias al break

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import re
 
RED = '\033[1;31m'
NOCOLOR = '\033[0;0m'
 
lista = ['madrid','tren','barcelona','coche']
 
dict = {}
 
for item in lista:
 
    dict[item] = True
 
ocurrencias = []
 
with open('texto2.txt') as lineas:
 
     for linea in lineas:
 
        for w in dict:
 
            if re.findall(r'\b(%s)\b' % w, linea):
 
                aImprimir = re.sub(r'\b(%s)\b' % w, r'%s\1%s' % (RED, NOCOLOR), linea)
                print (aImprimir)
            	break

Ya solo me faltaria colorear todas las palabras de la frase que coincidan con los terminos.
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

Imprimir parte del texto en color

Publicado por kip (257 intervenciones) el 01/06/2017 21:39:06
Hola de nuevo, en tu codigo cometes el error de realizar operaciones innecesarias como esta:

1
2
3
4
5
dict = {}
 
for item in lista:
 
    dict[item] = True

Por que crear un nuevo diccionario si ya tienes la lista con las palabras ?

Ahora bien, esta podria ser una solucion a lo que pides, que solo encuentre palabras exactas y que coloree todas las palabras en las frases.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import re
 
RED = '\033[1;31m'
NOCOLOR = '\033[0;0m'
 
palabras = ['Madrid', 'Barcelona', 'jueves']
frases = ['Ayer me fui de paseo por Madrid y Barcelona', 'Hoy es miercoles', 'Mañana es jueves']
nuevasFrases = []
 
for frase in frases:
    aImprimir = frase
    ocurrencias = []
    for palabra in palabras:
        if re.findall(r'\b%s\b' % palabra, frase):
            aImprimir = re.sub(r'(%s)' % palabra, r'%s\1%s' % (RED, NOCOLOR), aImprimir)
    nuevasFrases.append(aImprimir)
 
print('\n'.join(nuevasFrases))

018ad805cbc14e28acd9019302e7beaa

Fijate en lo que hago, en lugar de reescribir sobre la frase, reescribo sobre la variable aImprimir que contiene ya la frase coloreada anteriormente...

En tu codigo podria ser asi:

1
2
3
4
5
6
7
8
9
10
11
12
with open('texto2.txt') as lineas:
 
     for linea in lineas:
 
     aImprimir = linea
 
        for w in dict:
 
            if re.findall(r'\b(%s)\b' % w, linea):
 
                aImprimir = re.sub(r'\b(%s)\b' % w, r'%s\1%s' % (RED, NOCOLOR), aImprimir)
                print (aImprimir)

Pruebalo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Pepe
Val: 33
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Imprimir parte del texto en color

Publicado por Pepe (16 intervenciones) el 02/06/2017 09:05:50
Muchísimas gracias kip. ahora si funciona perfecto.

Lo del diccionario lo hice porque en algún lado leí que aunque consume mas recursos, para este tipo de operaciones de comparación de palabras funciona muchísimo mas rápido que las listas y claro como buen novato yo lo hice...jajaja

Por mi se puede dar el tema por solucionado.
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