¿Cómo puedo imprimir texto en negrita en Python?

4 minutos de lectura

Avatar de usuario de Jia-Luo
Jia Luo

P.ej:

print "hello"

¿Qué debo hacer para que el texto “hola” esté en negrita?

  • duplicado de texto en color en aplicaciones de terminal en unix. Muchos enlaces en las respuestas. Esa respuesta está en C, pero se traduce fácilmente a Python.

    – José

    19 de enero de 2012 a las 10:07


  • ¿Qué terminal estás usando? ¿Estás en Unix o Windows?

    – Sjoerd

    19 de enero de 2012 a las 10:08

  • Estoy usando safari. Acabo de descubrir que puedo usar etiquetas HTML en python.

    – Jia Luo

    19 de enero de 2012 a las 11:01

  • Safari puede implicar Mac OS X v10.7 (León).

    -Peter Mortensen

    2 de noviembre a las 18:43


Avatar de usuario de Bouba
Bouba

color de clase: MORADO = '\033[95m'
   CYAN = '\033[96m'
   DARKCYAN = '\033[36m'
   BLUE = '\033[94m'
   GREEN = '\033[92m'
   YELLOW = '\033[93m'
   RED = '\033[91m'
   BOLD = '\033[1m'
   UNDERLINE = '\033[4m'
   END = '\033[0m'

print(color.BOLD + 'Hello, World!' + color.END)

Addison's user avatar
Addison

Use this:

print '\033[1m' + 'Hello'

And to change back to normal:

print '\033[0m'

This page is a good reference for printing in colors and font-weights. Go to the section that says ‘Set graphics mode:’

And note this won’t work on all operating systems but you don’t need any modules.

Zuko's user avatar
Zuko

You can use termcolor for this:

 sudo pip install termcolor

To print a colored bold:

 from termcolor import colored
 print(colored('Hello', 'green', attrs=['bold']))

Para más información, ver termcolor en PyPi.

colores simples es otro paquete con una sintaxis similar:

 from simple_colors import *
 print(green('Hello', ['bold'])

El equivalente en colorama quizás Style.BRIGHT.

En la programación de computadoras directa, no existe tal cosa como “imprimir texto en negrita”. Retrocedamos un poco y entendamos que su texto es una cadena de bytes y los bytes son solo paquetes de bits. A la computadora, aquí está su texto de “hola”, en binario.

0110100001100101011011000110110001101111

Cada uno o cero es un bit. Cada ocho bits es un byte. Cada byte es, en una cadena como la de Python 2.x, un elemento de letra/número/puntuación (llamado carácter). Así por ejemplo:

01101000 01100101 01101100 01101100 01101111
h        e        l        l        o

La computadora traduce esos bits en letras, pero en una cadena tradicional (llamada cadena ASCII), no hay nada que indique texto en negrita. En una cadena Unicode, que funciona un poco diferente, la computadora puede admitir caracteres de idiomas internacionales, como los chinos, pero nuevamente, no hay nada que decir que un texto está en negrita y otro no. Tampoco hay fuente explícita, tamaño de texto, etc.

En el caso de imprimir HTML, aún está generando una cadena. Pero el programa de computadora que lee esa cadena (un navegador web) está programado para interpretar el texto como this is <b>bold</b> Como esto es audaz” cuando convierte su cadena de letras en píxeles en la pantalla. Si todo el texto fuera WYSIWYG, la necesidad de HTML en sí se mitigaría: simplemente seleccionaría el texto en su editor y lo pondría en negrita en lugar de escribir el HTML.

Otros programas usan diferentes sistemas: muchas respuestas explicaron un sistema completamente diferente para imprimir texto en negrita en las terminales. Me alegro de que hayas descubierto cómo hacer lo que quieres hacer, pero en algún momento querrás entender cómo funcionan las cadenas y la memoria.

avatar de usuario de aayoubi
aayoubi

Esto depende de si estás usando linux o Unix:

>>> inicio = "\033[1m"
>>> end = "\033[0;0m"
>>> print "The" + start + "text" + end + " is bold."
The text is bold.

The word text should be bold.

  • Re “using Linux”: Why is that? ANSI escape sequences? Can you elaborate in your answer? What are the preconditions for it to work (e.g., terminal emulation support)? – where doesn’t it work? But ********* without ********* “Edit:”, “Update:”, or similar – the answer should appear as if it was written today)

    – Peter Mortensen

    Nov 2 at 18:11


Peter Mortensen's user avatar
Peter Mortensen

There is a very useful module for formatting text (bold, underline, colors, etc.) in Python. It uses the curses library, but it’s very straightforward to use.

An example:

from terminal import render
print render('%(BG_YELLOW)s%(RED)s%(BOLD)sHey this is a test%(NORMAL)s')
print render('%(BG_GREEN)s%(RED)s%(UNDERLINE)sAnother test%(NORMAL)s')

I wrote a simple module named colors.py to make this a little more pythonic:

import colors

with colors.pretty_output(colors.BOLD, colors.FG_RED) as out:
    out.write("This is a bold red text")

with colors.pretty_output(colors.BG_GREEN) as out:
    out.write("This output have a green background but you " +
               colors.BOLD + colors.FG_RED + "can" + colors.END + " mix styles")

  • Re “using Linux”: Why is that? ANSI escape sequences? Can you elaborate in your answer? What are the preconditions for it to work (e.g., terminal emulation support)? – where doesn’t it work? But ********* without ********* “Edit:”, “Update:”, or similar – the answer should appear as if it was written today)

    – Peter Mortensen

    Nov 2 at 18:11


Peter Mortensen's user avatar
Peter Mortensen

Check out Colorama. It doesn’t necessarily help with bolding… but you can do colorized output on both Windows and Linux, and control the brightness:

from colorama import *

init(autoreset=True)
print Fore.RED + 'some red text'
print Style.BRIGHT + Fore.RED + 'some bright red text'

¿Ha sido útil esta solución?