Jak wydrukować pogrubiony tekst w Pythonie?

162

Jak wydrukować pogrubiony tekst w Pythonie?

Na przykład:

print "hello"

Co mam zrobić, aby tekst „cześć” był pogrubiony?

Jia-Luo
źródło
2
duplikat kolorowego tekstu w aplikacjach terminali w systemie UNIX . Wiele linków w odpowiedziach. Ta odpowiedź jest w C, ale łatwa do przetłumaczenia na Python.
Joe
6
Z jakiego terminala korzystasz? Czy korzystasz z systemu Unix czy Windows?
Sjoerd,
używam safari. Właśnie dowiedziałem się, że mogę używać tagów HTML w Pythonie.
Jia-Luo

Odpowiedzi:

378
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)
Boubakr
źródło
15
Podoba mi się sposób, w jaki nie tylko odważyliście się na pogrubienie, ale stworzyliście dla nich całą klasę, do której mogą się odwoływać i pomóc wszystkim użytkownikom w przeglądaniu. Dziękuję Ci.
GreenHawk1220
3
Użyję tego jako dyktanda, a nie klasy. Dzięki!
dvlden
6
[1mHello World ![0m
Praca nad moją konfiguracją: ubuntu 19.10, python 3.7
Elouan Keryell-Even
Czy mogę łączyć pogrubienie z kolorem? @Boubakr
alper
62

Użyj tego:

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

Aby wrócić do normalnego trybu:

print '\033[0m'

Ta strona jest dobrym punktem odniesienia do drukowania w kolorach i grubościach czcionek. Przejdź do sekcji „Ustaw tryb graficzny:”

Pamiętaj, że to nie zadziała we wszystkich systemach operacyjnych, ale nie potrzebujesz żadnych modułów.

Addison
źródło
31

Możesz do tego użyć termcolor:

 sudo pip install termcolor

Aby wydrukować kolorowe pogrubienie:

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

Aby uzyskać więcej informacji, zobacz termcolor na PyPi .

simple-colors to kolejny pakiet o podobnej składni:

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

Odpowiednikiem może być coloramaStyle.BRIGHT .

Olu Smith
źródło
8
Gdybym miał zgadywać, ktoś zgodził się na to, ponieważ nie odpowiedział na faktyczne pytanie, jak wydrukować coś pogrubioną czcionką.
Christian
Masz rację, była aktualizacja. Przepraszam za tych facetów.
Olu Smith
22

W prostym programowaniu komputerowym nie ma czegoś takiego jak „drukowanie pogrubionego tekstu”. Cofnijmy się trochę i zrozummy, że twój tekst jest ciągiem bajtów, a bajty to po prostu wiązki bitów. Oto Twój tekst „hello” w postaci binarnej do komputera .

0110100001100101011011000110110001101111

Każdy jeden lub zero to trochę. Każde osiem bitów to bajt. Każdy bajt w łańcuchu takim jak ten w Pythonie 2.x zawiera jedną literę / cyfrę / element interpunkcyjny (nazywany znakiem). Na przykład:

01101000 01100101 01101100 01101100 01101111
h        e        l        l        o

Komputer tłumaczy te bity na litery, ale w tradycyjnym łańcuchu (nazywanym ciągiem ASCII) nie ma nic, co wskazywałoby na pogrubiony tekst. W ciągu znaków Unicode, który działa trochę inaczej, komputer może obsługiwać międzynarodowe znaki językowe, takie jak chińskie, ale znowu nie ma nic do powiedzenia, że ​​część tekstu jest pogrubiona, a część nie. Nie ma również wyraźnej czcionki, rozmiaru tekstu itp.

W przypadku drukowania HTML nadal generujesz ciąg. Ale program komputerowy odczytujący ten ciąg (przeglądarka internetowa) jest zaprogramowany do interpretowania tekstu, takiego this is <b>bold</b>jak „to jest pogrubione ”, kiedy konwertuje ciąg liter na piksele na ekranie. Gdyby cały tekst był WYSIWYG, potrzeba samego HTML byłaby złagodzona - po prostu zaznaczyłbyś tekst w swoim edytorze i pogrubił go zamiast wpisywać HTML.

Inne programy używają innych systemów - wiele odpowiedzi wyjaśniało zupełnie inny system drukowania pogrubionego tekstu na terminalach. Cieszę się, że dowiedziałeś się, jak robić to, co chcesz, ale w pewnym momencie będziesz chciał zrozumieć, jak działają struny i pamięć.

Ken Kinder
źródło
9
Choć ta odpowiedź może się wydawać niezadowalająca, prawdopodobnie jest to ta, która najlepiej odpowiada na zadane pytanie . To wcale nie jest kwestia Pythona, ale raczej pytanie o to, co robi-renderowanie .
John Y
8
Chodzi o to, że każdy zainteresowany odpowiedzią na to pytanie rozumie binarny i jak jest używany do reprezentowania łańcuchów. Interesuje nas, jak używać Pythona, aby tekst wyglądał na pogrubiony, na co odpowiedź powyżej. Ta odpowiedź jest zbyt pedantyczna.
Trevor
16

To zależy, jeśli używasz linux / unix:

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

Słowo textpowinno być pogrubione.

aayoubi
źródło
13

Sprawdź colorama . Niekoniecznie pomaga to w pogrubieniu ... ale możesz tworzyć kolorowe wydruki zarówno w systemie Windows, jak i Linux oraz kontrolować jasność:

from colorama import *
init(autoreset=True)
print Fore.RED + 'some red text'
print Style.BRIGHT + Fore.RED + 'some bright red text'
John Szakmeister
źródło
13

Istnieje bardzo przydatny moduł do formatowania tekstu (pogrubienie, podkreślenie, kolory…) w Pythonie. Używa curseslib, ale jest bardzo prosty w użyciu.

Przykład:

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

AKTUALIZACJA:

Napisałem prosty moduł o nazwie colors.py, aby uczynić to nieco bardziej pythonowym:

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")
Diego Navarro
źródło
2
ImportError: No module named terminal ImportError: No module named render Właściwie jest to jedyna strona, jaką udało mi się znaleźć na temat modułu "terminal". Proszę rozwinąć.
minerały
Powyższy link zawierał terminalmoduł, ale przekierowują stronę. Oto kod zapisany w pamięci podręcznej Google.
Diego Navarro
W każdym razie stworzyłem własny moduł Pythona, aby rozwiązać ten problem, sprawdź to @minerals ;-)
Diego Navarro
8
print '\033[1m  Your Name  \033[0m'

\ 033 [1m to Unicode dla pogrubienia w terminalu \ 033 [0m to Unicode dla końca edytowanego tekstu i powrotu do domyślnego formatu tekstu !!!!!

jeśli nie użyjesz \ 033 [0m, to cały nadchodzący tekst terminala będzie pogrubiony !!!!!!!!!

Bhavik Sakhiya
źródło
proszę dodać wyjaśnienie
Harsha Biyani
2
Przeczytaj inną odpowiedź przed udzieleniem odpowiedzi! To pytanie ma wiele poprawnych odpowiedzi z większą liczbą wyjaśnień. Nie dodajesz nic przydatnego.
Mohammad Dehghan
6

Zainstaluj termcolormoduł

sudo pip install termcolor

a następnie spróbuj tego w przypadku kolorowego tekstu

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

lub to dla pogrubionego tekstu:

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

W Pythonie 3 możesz alternatywnie użyć cprintjako zamiennika wbudowanego print, z opcjonalnym drugim parametrem dla kolorów lub attrsparametrem dla pogrubienia (i innych atrybutów, takich jak underline) oprócz normalnych nazwanych printargumentów, takich jak filelub end.

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

Pełne ujawnienie, ta odpowiedź jest w dużej mierze oparta na odpowiedzi Olu Smitha i była pomyślana jako zmiana , która znacznie zmniejszyłaby szum na tej stronie, ale z powodu błędnej koncepcji niektórych recenzentów na temat tego, czym powinna być zmiana, jestem teraz zmuszony żeby to była osobna odpowiedź.

chrześcijanin
źródło
3

Niektóre terminale pozwalają na drukowanie kolorowego tekstu. Niektóre kolory wyglądają jak „odważne”. Próbować:

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

Sekwencja '\ 033 [1; 37m' sprawia, że ​​niektóre terminale rozpoczynają drukowanie w „jasnej bieli”, która może wyglądać trochę jak pogrubiona biel. '\ 033 [0; 0m' wyłączy go.

Maciek
źródło
3

Zakładając, że naprawdę masz na myśli „drukuj” na prawdziwym terminalu drukującym:

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

Po prostu wyślij to na swój adres stdout.

John Machin
źródło
2

Prosta odwaga - dwuwierszowy kod

W Pythonie 3 możesz użyć colorama - simple_colors: (Strona Simple Colors: https://pypi.org/project/simple-colors/ - przejdź do nagłówka „Użycie”). Zanim wykonasz poniższe czynności, upewnij się, że pip install simple_colours.

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

wprowadź opis obrazu tutaj

PythonMaster202
źródło
Dzięki! Musimy tylko najpierw zainstalować simple_colors:pip install simple_colors
yzerman