ฉันจะพิมพ์ข้อความตัวหนาใน Python ได้อย่างไร


162

ฉันจะพิมพ์ข้อความตัวหนาใน Python ได้อย่างไร

ตัวอย่างเช่น:

print "hello"

ฉันควรทำอย่างไรเพื่อให้ข้อความ“ สวัสดี” ปรากฏเป็นตัวหนา


2
ซ้ำกันของสีของข้อความใน aplications ขั้วในยูนิกซ์ ลิงก์จำนวนมากในคำตอบ คำตอบนั้นอยู่ใน C แต่แปลเป็น Python ได้ง่าย
Joe

6
คุณใช้เทอร์มินัลใด คุณอยู่บน Unix หรือ Windows หรือไม่
Sjoerd

ฉันใช้ซาฟารี เพิ่งค้นพบว่าฉันสามารถใช้แท็ก HTML ในหลาม
Jia-Luo

คำตอบ:


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
ฉันชอบวิธีที่คุณไม่ได้ทำตัวหนา แต่สร้างคลาสทั้งหมดเพื่อให้อ้างอิงและช่วยให้ผู้ใช้ทุกคนดู ขอบคุณ.
GreenHawk1220

3
ฉันจะใช้มันเป็น dict ไม่ใช่คลาส ขอบคุณ!
dvlden

6
มีการพิมพ์ดังต่อไปนี้:[1mHello World ![0m

ทำงานกับการตั้งค่าของฉัน: ubuntu 19.10, python 3.7
Elouan Keryell-Even

ฉันสามารถรวมตัวหนากับสีได้หรือไม่? @Boubakr
alper

62

ใช้สิ่งนี้:

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

และเปลี่ยนกลับเป็นปกติ:

print '\033[0m'

หน้านี้เป็นข้อมูลอ้างอิงที่ดีสำหรับการพิมพ์สีและน้ำหนักแบบอักษร ไปที่ส่วนที่ระบุว่า 'ตั้งค่าโหมดกราฟิก:'

และทราบว่าสิ่งนี้จะไม่ทำงานบนระบบปฏิบัติการทั้งหมด แต่คุณไม่ต้องการโมดูลใด ๆ


31

คุณสามารถใช้ termcolor สำหรับสิ่งนี้:

 sudo pip install termcolor

หากต้องการพิมพ์ตัวหนาสี:

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

สำหรับข้อมูลเพิ่มเติมดูtermcolor บน PyPiPyPi

สีง่ายเป็นแพคเกจอื่นที่มีไวยากรณ์ที่คล้ายกัน:

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

เทียบเท่าในColoramaStyle.BRIGHTอาจจะ


8
ถ้าฉันต้องเดาใครบางคนที่ลงคะแนนเพราะมันไม่ได้ตอบคำถามที่แท้จริงว่าจะพิมพ์สิ่งที่เป็นตัวหนาได้อย่างไร
คริสเตียน

สิทธิ์ของคุณมีการอัปเดต ขออภัยเกี่ยวกับพวกนั้น
Olu Smith

22

ในการเขียนโปรแกรมคอมพิวเตอร์แบบตรงไม่มีสิ่งเช่น "การพิมพ์ข้อความตัวหนา" ลองสำรองข้อมูลสักหน่อยและทำความเข้าใจว่าข้อความของคุณเป็นสตริงไบต์และไบต์เป็นเพียงการรวมกลุ่มของบิต ไปยังเครื่องคอมพิวเตอร์ของคุณที่นี่ "สวัสดี" ข้อความในไบนารี

0110100001100101011011000110110001101111

หนึ่งหรือศูนย์แต่ละรายการจะเล็กน้อย ทุก ๆ แปดบิตคือหนึ่งไบต์ ทุกไบต์คือสตริงเช่นเดียวกับใน Python 2.x รายการหนึ่งตัวอักษร / หมายเลข / เครื่องหมายวรรคตอน (เรียกว่าตัวอักษร) ตัวอย่างเช่น:

01101000 01100101 01101100 01101100 01101111
h        e        l        l        o

คอมพิวเตอร์แปลบิตเหล่านั้นเป็นตัวอักษร แต่ในสตริงดั้งเดิม (เรียกว่าสตริง ASCII) ไม่มีอะไรที่จะบ่งบอกถึงตัวหนา ในสตริง Unicode ซึ่งทำงานแตกต่างกันเล็กน้อยคอมพิวเตอร์สามารถรองรับตัวอักษรภาษาต่างประเทศเช่นจีน แต่ไม่มีอะไรจะพูดได้ว่าข้อความบางส่วนเป็นตัวหนาและข้อความบางส่วนไม่ นอกจากนี้ยังไม่มีแบบอักษรขนาดตัวอักษรที่ชัดเจน ฯลฯ

ในกรณีของการพิมพ์ HTML คุณยังคงส่งออกสตริง แต่โปรแกรมคอมพิวเตอร์ที่อ่านสตริงนั้น (เว็บเบราว์เซอร์) นั้นถูกตั้งโปรแกรมให้ตีความข้อความเช่นthis is <b>bold</b>"นี่เป็นตัวหนา " เมื่อมันแปลงสตริงตัวอักษรของคุณเป็นพิกเซลบนหน้าจอ หากข้อความทั้งหมดเป็น WYSIWYG ความต้องการใช้ HTML จะลดลง - คุณเพียงแค่เลือกข้อความในเครื่องมือแก้ไขของคุณและทำตัวหนาแทนที่จะพิมพ์ HTML

โปรแกรมอื่น ๆ ใช้ระบบที่แตกต่างกัน - คำตอบมากมายอธิบายระบบที่แตกต่างอย่างสิ้นเชิงสำหรับการพิมพ์ข้อความตัวหนาบนเครื่องเทอร์มินัล ฉันดีใจที่คุณพบวิธีการทำสิ่งที่คุณต้องการ แต่ในบางจุดคุณจะต้องเข้าใจว่าสตริงและหน่วยความจำทำงานอย่างไร


9
ในฐานะที่พอใจเป็นคำตอบนี้อาจดูเหมือนมันอาจเป็นหนึ่งซึ่งส่วนใหญ่ต้องตอบคำถามที่เป็นถาม มันไม่ได้เป็นคำถาม Python เลย แต่เป็นคำถามที่ทำให้เกิดการเรนเดอร์
John Y

8
สิ่งคือทุกคนที่สนใจคำตอบของคำถามนี้จะเข้าใจไบนารีและวิธีที่มันใช้แทนสตริง เราสนใจวิธีการใช้งานไพ ธ อนเพื่อทำให้ข้อความดูเป็นตัวหนาซึ่งตอบไว้ด้านบน คำตอบนี้เป็นวิธีการอวดความรู้
เทรเวอร์

16

ขึ้นอยู่กับว่าคุณกำลังใช้ linux / unix:

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

คำtextควรเป็นตัวหนา


13

ตรวจสอบColorama มันไม่ได้ช่วยในเรื่องการขึ้นรูป ... แต่คุณสามารถทำ colorized output ทั้งใน Windows และ Linux และควบคุมความสว่าง:

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

13

มีโมดูลที่มีประโยชน์มากสำหรับการจัดรูปแบบข้อความ (ตัวหนาขีดเส้นใต้สี .. ) ใน Python มันใช้curses lib แต่มันตรงไปตรงมามากที่จะใช้

ตัวอย่าง:

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

UPDATED:

ฉันเขียนโมดูลง่าย ๆ ชื่อว่าcolors.pyเพื่อทำให้เป็น 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")

2
ImportError: No module named terminal ImportError: No module named render ที่จริงนี่เป็นเว็บไซต์เดียวที่ฉันสามารถหาเกี่ยวกับ "terminal" โมดูล กรุณาอธิบายอย่างละเอียด
แร่ธาตุ

ลิงค์ด้านบนใช้เพื่อบรรจุterminalโมดูล แต่มีการเปลี่ยนเส้นทางหน้า นี่คือรหัสที่แคชโดย google
Diego Navarro

ยังไงก็ตามฉันได้สร้างโมดูลหลามของตัวเองเพื่อแก้ปัญหานี้ลองดูได้ที่ @minerals ;-)
Diego Navarro

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

\ 033 [1m คือยูนิโค้ดสำหรับตัวหนาในเทอร์มินัล \ 033 [0m คือยูนิโค้ดสำหรับสิ้นสุดข้อความที่แก้ไขและกลับเป็นข้อความเริ่มต้นที่จัดรูปแบบ !!!!!

ถ้าคุณไม่ใช้ \ 033 [0m มากกว่าข้อความที่กำลังจะมาถึงของเทอร์มินัลจะกลายเป็นตัวหนา !!!!!!!!!


โปรดเพิ่มคำอธิบายบางอย่าง
Harsha Biyani

2
โปรดอ่านคำตอบอื่น ๆ ก่อนตอบ! คำถามนี้มีคำตอบที่ถูกต้องมากมายพร้อมคำอธิบายเพิ่มเติม คุณไม่ได้เพิ่มอะไรที่มีประโยชน์
Mohammad Dehghan

6

ติดตั้งtermcolorโมดูล

sudo pip install termcolor

จากนั้นลองใช้ข้อความสี

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

หรือนี่คือข้อความตัวหนา:

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

ในหลาม 3 คุณสามารถเลือกใช้cprintเป็นดรอปแทนสำหรับในตัวprintด้วยพารามิเตอร์ที่สองเป็นตัวเลือกสำหรับสีหรือattrsพารามิเตอร์สำหรับตัวหนา (และคุณลักษณะอื่น ๆ เช่นunderline) นอกเหนือไปจากการตั้งชื่อตามปกติprintข้อโต้แย้งเช่นหรือfileend

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

การเปิดเผยแบบเต็มคำตอบนี้ขึ้นอยู่กับคำตอบของ Olu Smith และมีจุดประสงค์เพื่อแก้ไขซึ่งจะลดเสียงรบกวนในหน้านี้อย่างมาก แต่เนื่องจากแนวคิดที่เข้าใจผิดของผู้ตรวจสอบบางคนเกี่ยวกับสิ่งที่การแก้ไขควรจะเป็นตอนนี้ฉันถูกบังคับ เพื่อทำให้คำตอบแยกออกจากกัน


3

บางเทอร์มินัลอนุญาตให้พิมพ์ข้อความสี บางสีดูเหมือนว่าเป็น "ตัวหนา" ลอง:

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

ลำดับ '\ 033 [1; 37m' ทำให้บางเทอร์มินัลเริ่มพิมพ์ใน "สีขาวสว่าง" ที่อาจดูเล็กน้อยเหมือนสีขาวที่เป็นตัวหนา '\ 033 [0; 0m' จะปิด


3

สมมติว่าคุณจริงๆหมายถึง "พิมพ์" บนจริงขั้วพิมพ์:

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

stdoutเพียงแค่ส่งมาที่คุณ


2

Simple Boldness - รหัสสองบรรทัด

ในหลาม 3 คุณสามารถใช้ Colorama - simple_colors: (สีที่เรียบง่ายหน้านี้: https://pypi.org/project/simple-colors/ . - ไปที่หัวข้อ 'การใช้งาน) pip install simple_coloursก่อนที่คุณจะทำในสิ่งที่อยู่ด้านล่างให้แน่ใจว่าคุณ

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

ป้อนคำอธิบายรูปภาพที่นี่


ขอบคุณ! เราต้องติดตั้ง simple_colors ก่อน:pip install simple_colors
yzerman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.