Come posso stampare un testo in grassetto in Python?


162

Come posso stampare un testo in grassetto in Python?

Per esempio:

print "hello"

Cosa devo fare in modo che il testo "ciao" sia visualizzato in grassetto?


2
duplicato del testo a colori nelle applicazioni terminali in unix . Molti link nelle risposte. Questa risposta è in C, ma facilmente tradotta in Python.
Joe,

6
Quale terminale stai usando? Sei su Unix o Windows?
Sjoerd,

sto usando Safari. Ho appena scoperto che posso usare i tag HTML in Python.
Jia-Luo,

Risposte:


379
class color:
   PURPLE = '\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)

15
Mi piace il modo in cui non solo hai fatto il grassetto, ma hai creato un'intera classe per cui fare riferimento e aiutare tutti gli utenti a visualizzare. Grazie.
GreenHawk1220,

3
Lo userò come dict, non come lezione. Grazie!
dvlden,

6
Sta stampando quanto segue:[1mHello World ![0m

Lavorando sulla mia configurazione: Ubuntu 19.10, Python 3.7
Elouan Keryell-Even

Posso combinare audace anche con il colore? @Boubakr
Alper

62

Usa questo:

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

E per tornare alla normalità:

print '\033[0m'

Questa pagina è un buon riferimento per la stampa a colori e grammature dei caratteri. Vai alla sezione che dice "Imposta la modalità grafica:"

E nota che questo non funzionerà su tutti i sistemi operativi ma non hai bisogno di alcun modulo.


31

È possibile utilizzare termcolor per questo:

 sudo pip install termcolor

Per stampare un grassetto colorato:

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

Per ulteriori informazioni, vedere termcolor su PyPi .

simple-colours è un altro pacchetto con sintassi simile:

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

L'equivalente in colorama può essere Style.BRIGHT.


8
Se dovessi indovinare qualcuno ha votato verso il basso perché non ha risposto alla domanda reale su come stampare qualcosa in grassetto.
Christian,

Hai ragione, c'è stato un aggiornamento. Mi dispiace per quei ragazzi.
Olu Smith,

22

Nella programmazione diretta del computer, non esiste una cosa come "stampare un testo in grassetto". Facciamo un po 'di backup e comprendiamo che il testo è una stringa di byte e che i byte sono solo fasci di bit. Al computer, ecco il tuo testo "ciao", in binario .

0110100001100101011011000110110001101111

Ognuno o zero è un po '. Ogni otto bit è un byte. Ogni byte è, in una stringa come quella in Python 2.x, un elemento lettera / numero / punteggiatura (chiamato carattere). Quindi per esempio:

01101000 01100101 01101100 01101100 01101111
h        e        l        l        o

Il computer traduce quei bit in lettere, ma in una stringa tradizionale (chiamata stringa ASCII), non c'è nulla che indichi un testo in grassetto. In una stringa Unicode, che funziona in modo leggermente diverso, il computer può supportare caratteri in lingua internazionale, come quelli cinesi, ma ancora una volta, non c'è nulla da dire che un testo sia in grassetto e un testo no. Non ci sono anche caratteri espliciti, dimensioni del testo, ecc.

Nel caso di stampa HTML, stai ancora emettendo una stringa. Ma il programma per computer che legge quella stringa (un browser web) è programmato per interpretare il testo come this is <b>bold</b>"questo è in grassetto " quando converte la tua stringa di lettere in pixel sullo schermo. Se tutto il testo fosse WYSIWYG, la necessità dell'HTML stesso sarebbe mitigata: selezioneresti semplicemente il testo nel tuo editor e lo in grassetto invece di digitare l'HTML.

Altri programmi utilizzano sistemi diversi: molte risposte hanno spiegato un sistema completamente diverso per stampare testi in grassetto sui terminali. Sono contento che tu abbia scoperto come fare quello che vuoi fare, ma a un certo punto vorrai capire come funzionano le stringhe e la memoria.


9
Per quanto insoddisfacente possa sembrare questa risposta, è probabilmente quella che risponde più correttamente alla domanda come posta . Non è affatto una domanda Python, ma piuttosto una domanda qualunque sia il rendering .
John Y,

8
Il fatto è che tutti coloro che sono interessati alla risposta a questa domanda comprendono il binario e come viene usato per rappresentare le stringhe. Siamo interessati a come usare Python per rendere grassetto il testo, a cui si risponde sopra. Questa risposta è troppo pedante.
Trevor,

16

Questo dipende se stai usando linux / unix:

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

La parola textdovrebbe essere in grassetto.


13

Dai un'occhiata a colorama . Non aiuta necessariamente con il grassetto ... ma puoi fare un output colorato su Windows e Linux e controllare la luminosità:

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

13

C'è un modulo molto utile per la formattazione del testo (grassetto, sottolineato, colori ...) in Python. Usa la curseslib ma è molto semplice da usare.

Un esempio:

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')

AGGIORNAMENTO:

Ho scritto un semplice modulo chiamato colors.py per rendere questo un po 'più pitonico:

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")

2
ImportError: No module named terminal ImportError: No module named render In realtà questo è l'unico sito che ho trovato sul modulo "terminale". Per favore, elabora.
minerali

Il link sopra usato per contenere il terminalmodulo, ma hanno reindirizzato la pagina. Ecco il codice memorizzato nella cache da google.
Diego Navarro,

Ad ogni modo, ho creato il mio modulo Python per risolverlo, dai un'occhiata a @minerals ;-)
Diego Navarro,

8
print '\033[1m  Your Name  \033[0m'

\ 033 [1m è l'unicode per il grassetto nel terminale \ 033 [0m è l'unicode per terminare il testo modificato e indietro il testo predefinito di default !!!!!

se non usi \ 033 [0m di tutto il testo imminente del terminale diventerà grassetto !!!!!!!!!


per favore, aggiungi qualche spiegazione
Harsha Biyani,

2
Si prega di leggere l'altra risposta prima di rispondere! Questa domanda ha molte risposte corrette con più spiegazioni. Non stai aggiungendo nulla di utile.
Mohammad Dehghan,

6

Installa il termcolormodulo

sudo pip install termcolor

e quindi prova questo per il testo colorato

from termcolor import colored
print colored('Hello', 'green')

o questo per il testo in grassetto:

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

In Python 3 puoi usare alternativamente cprintcome sostituzione drop-in per il built-inprint , con il secondo parametro opzionale per i colori o il attrsparametro per grassetto (e altri attributi come underline) oltre ai normali printargomenti con nome come fileo end.

import sys
from termcolor import cprint
cprint('Hello', 'green', attrs=['bold'], file=sys.stderr)

Divulgazione completa, questa risposta è fortemente basata sulla risposta di Olu Smith ed era intesa come una modifica , che avrebbe ridotto notevolmente il rumore in questa pagina ma a causa di alcuni concetto errato di ciò che una modifica dovrebbe essere, ora sono costretto per rendere questa una risposta separata.


3

Alcuni terminali consentono di stampare testo colorato. Alcuni colori sembrano "audaci". Provare:

print ('\033[1;37mciao!')

La sequenza '\ 033 [1; 37m' fa in modo che alcuni terminali inizino a stampare in "bianco brillante" che potrebbe apparire un po 'in grassetto bianco. '\ 033 [0; 0m' lo disattiverà.


3

Supponendo che intendi davvero "stampa" su un vero terminale di stampa:

>>> text = 'foo bar\r\noof\trab\r\n'
>>> ''.join(s if i & 1 else (s + '\b' * len(s)) * 2 + s
...         for i, s in enumerate(re.split(r'(\s+)', text)))
'foo\x08\x08\x08foo\x08\x08\x08foo bar\x08\x08\x08bar\x08\x08\x08bar\r\noof\x08\
x08\x08oof\x08\x08\x08oof\trab\x08\x08\x08rab\x08\x08\x08rab\r\n'

Invialo al tuo stdout.


2

Audacia semplice - Codice a due righe

In python 3 puoi usare colorama - simple_colors: (pagina Colori semplici: https://pypi.org/project/simple-colors/ - vai alla voce 'Uso'.) Prima di fare ciò che è sotto, assicurati di pip install simple_colours.

from simple_colors import *
print(green('hello', 'bold'))

inserisci qui la descrizione dell'immagine


Grazie! Dobbiamo solo installare simple_colors:pip install simple_colors
yzerman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.