본문 바로가기
IT/Python

Python 출력 text의 color를 변경해 보자

by 소소메모 2020. 3. 25.
반응형

✒ 파이썬 출력 글자 색 변경하기

 

 

파이썬 출력되는 글자의 색 변경하는 것을 정리하여 말씀드리겠습니다.

 

 

Text에 색을 주는 것은 사실은 Python에 특화된 것은 아니고, ANSI escape code를 사용하는 것이라 다른 언어에서도 거의 비슷하게 사용되지만 파이썬 중심으로 설명하겠습니다.

 

 

 

1. 색 표현 예시

 

사용법은 어렵지 않기에

먼저 보여드리면,

print('\033[95m' + '안녕' + '\033[96m' + '하세요' + '\033[0m')

 

위와 같이 사용하는 것입니다.

 

그러면 결과가

위와 같이 나오게 됩니다.

보라색과 하늘색으로 텍스트가 출력되었습니다.

 

 

코드를 잘 보면, 금방 이해를 하실 수 있습니다.

텍스트 앞에 '\033[' 을 주고, 뒤에 어떤 숫자와 'm' 을 붙인 것을 넣어 색이 변경되게 했습니다.

 

즉 

\033[  +  숫자  + m

이런 형태로 텍스트 앞에 붙여주면 됩니다.

 

 

 

2. Escape 코드 (색 변경을 위한 시작 코드)

 

'\033[' 이것을 설명드리면

이 기호는 Escape sequences 중에서 Control Sequence Introduce (CSI) 를 나타내는 코드입니다.

Terminal 창에 뭔가 특수한 역할을 하는 명령을 주는 시작 코드라고 이해하시면 됩니다.

 

숫자가 왜 033 이냐 하면, 033 은 oct 로 ESC 코드를 나타내는 것으로,

'\033[' 은 '\xb1[' 이나 '\u001b['  로 대체해서 사용해도 동일한 효과를 볼 수 있습니다.

 

\033[  =  \xb1[  =  \u001b[

 

코드로 보여드리면 다음과 같습니다.

print('\033[95m' + '1.안녕' + '\033[0m') 
print('\x1b[95m' + '2.안녕' + '\x1b[0m') 
print('\u001b[95m' + '3.안녕' + '\u001b[0m')

실행결과 모두 95 를 넣었기 때문에 보라색으로 동일합니다.

 

어떤 것을 사용해도 상관없습니다.

저는 여기서는 계속 \033[ 으로 진행할 예정입니다.

 

 

 

3. ANSI Text 색 변경 숫자 코드 (글자색, 배경색)

 

다음으로 '숫자m' 을 설명드리겠습니다.

 

'm' 은 그냥 가장 뒤에 붙이는 것이라고 생각하시면 됩니다.

 

 

위 예시 코드를 보면 0m 이 있었는데요,

0 은 실제 색 코드라기보다는 색을 원래대로 되돌리는 것으로 보시면 됩니다.

 

 

 

숫자는 ANSI 표준으로 정해진 규칙이 있습니다.

즉, 숫자별 색이 정해져 있습니다.

 

text 색상 숫자 표

Text의 색 숫자 값은 위와 같이 정리됩니다. (색은 참고용입니다. 실제 표현된 색은 일부 차이가 있을 수 있습니다.)

 

크게 두 가지로 나누어지는데,

30~37 이 기본 8색이며, 90~97은 기본 8색에서 밝아진 색입니다.

 

 

 

글자색뿐만 아니라 글자 배경색도 변경이 됩니다.

 

배경색 변경 숫자도 글자색 변경처럼 총 16가지가 정의되어 있습니다.

색은 동일하지만 배경색이 변하는 것으로 생각하시면 됩니다.

 

 

배경색은 글자색 뒤에 10씩 더 해진 것이라고 보면 됩니다.

40~47 이 기본 8색이고, 100~107 이 밝아진 색상 8색으로 총 16색이 있습니다.

 

 

 

이제 색상 변경에 대한 이해가 되셨으니

예제 코드를 보겠습니다.

 

print('\033[31m \033[43m' + '글자와 배경 변경' + '\033[0m') 

노란색 배경에 빨간색 글자 출력

 

 코드를 설명하여 정리하면

 

  • '\033[31m'   :  Text 색을 빨간색 (Red) 로 변경
  • '\033[43m'   :  Text 배경색을 노란색(Yellow)로 변경
  • '글자와 배경 변경'  :  '글자와 배경 변경' 이라는 문자열 출력
  • '\033[0m'  :  Terminal 속성 초기화 (Reset)

 

 

4. Reset 코드 (초기화)

 

예제에서 마지막에 들어가는 0m 은 색 코드에서 설명을 안 드렸는데요.

 

실제 색 변경을 의미하는 것은 아니고, Terminal에 특정 변경을 시도했던 모든 것을 Reset 하는 의미입니다.

만약, 색 변경 후 Reset을 해주지 않으면, 이후의 모든 텍스트는 바로 직전 변경했던 색으로 계속 출력되게 됩니다.

print('\033[31m' + '예시 입니다.') 
print('파이썬 최고!')

색이 모두 Red 로 변했습니다. 출력 뿐 아니라 Terminal 명령도 모두 Red 로 변합니다.

위의 예와 같이 마지막에 '\033[0m' 이 없을 경우 이후의 모든 Terminal 모든 Text 가 영향을 받습니다. 

 

 

그래서 색상 변경 시 항상 마지막에 Reset을 해주는 것을 습관처럼 넣어 주는 것이 좋습니다.

 

 

이제는 색상 코드표만 참고하시면, 파이썬 글자색이나 글자 배경색 변경은 어렵지 않으실 거라 생각됩니다.

 

 

 

 

5. 색상 확장 (256-color, True color <RGB> 색 표현)

 

그런데,

저 위에 16가지 색만 가능한가? 그러기에는 좀 부족하지 않나?

위와 같은 물음이 생길 수 있습니다.

 

 

위 색상 코드표의 16색 이외에도 

8bit (256 색상) 및 24bit (트루 칼라) 표현이 가능합니다.

 

 

 

5-1) 256-color 색 

 

256-color 사용법은 다음과 같습니다.

# 256-color 글자색 변경
\033[38;5;256색상값m


# 256-color 배경색 변경
\033[48;5;256색상값m

 

글자색은 '\033[38;5; 다음에 256-color 색상 값을 넣어준 뒤 m 을 붙이면 됩니다.

배경색은 '\033[38;5; 다음에 256-color 색상 값을 넣어준 뒤 m 을 붙이면 됩니다.

 

 

256-color 색상 값이 필요한데, 색상 값은 아래 링크를 참고하시면 됩니다.

 

https://jonasjacek.github.io/colors/

 

256 Colors - Cheat Sheet - Xterm, HEX, RGB, HSL

256 COLORS - CHEAT SHEET Errata Exists: There seem to be duplicate color names in the list, and there are clashes between web and X11 colors in the CSS color scheme, as described here. Beware. The following is a list of 256 (Xterm) colors containing an exa

jonasjacek.github.io

위 링크에서 Xterm Number 값을 넣으면 됩니다.

 

 

예를 들어 DarkOrange 라는 글자색을 표현하고 싶다면 (원래 알던 색은 아닙니다..)

 

다음과 같이 하면 됩니다.

 

위 링크에서 DarkOrange 의 Xterm Number 를 찾습니다.

 

 

208 번 입니다.

 

이 값으로 색을 변경하는 코드를 아래와 같이 작성하면,

 

print('\033[38;5;208m' + '다크 오렌지' + '\033[0m')

 

위와 같이 256-color 중 하나인 DarkOrange 색으로 글자색이 출력되는 것을 확인할 수 있습니다.

 

 

 

5-2) True color (RGB) 색

 

24Bit True color (RGB) 로 글자색 및 배경색을 변경하는 방법은 다음과 같습니다.

 

True color 는 많이 사용하고 있는 RGB 값을 사용해서 표현합니다.

 

 

# true color 글자색 변경
\033[38;2;r;g;b m


# true color 배경색 변경
\033[48;2;r;g;b m

 

글자색 변경은 '\033[38;2; 뒤에 r값; g값; b값 그리고 m 을 넣어주면 됩니다.

배경색 변경은 '\033[48;2; 뒤에 r값; g값; b값 그리고 m 을 넣어주면 됩니다.

 

 

예를 들어 Orchid 라는 색이 있는데,  RGB 값이 215, 95, 215 입니다.

이 색으로 글자색을 변경한다면

다음과 같이 코드를 작성하면 됩니다.

 

print('\033[38;2;215;95;215m' + 'RGB값으로 색 변경' + '\033[0m')

 

 

 

6. 글자색 변경 요약

 

길게 작성했지만,

쉽고 편하게 print 시 글자색이나 배경색 변경을 사용하시려면

 

  • 글자색 변경 (rgb) : '\033[38;2;r;g;bm' 
  • 배경색 변경 (rgb) : '\033[48;2;r;g;bm'
  • 초기화 : '\033[0m'

 

이렇게만 3개만 아셔도 충분히 색표현 가능하리라 봅니다.

 

 

 

 

이상으로 파이썬 출력 글자색 변경하는 법 설명을 마치겠습니다.

 

 

반응형

댓글1

  • EV7DOD 2022.07.31 17:42 신고

    댓글 작성시점 기준으로 'requests_html' 모듈을 설치하면 'colorama' 모듈이 같이 설치되는데 이거 지워주지 않으면 'requests_html' 모듈을 사용할 때 256-트루컬러 적용이 안되는 버그가 있는 것 같네요..이틀째 쥐어뜯다가 파이썬빌드 파일 하나하나 지우고 대체해가며 테스트해서 겨우 해결했어요...ㅋㅋㅋ 아마 없겠지만 혹시 비슷한 증상인 분들은 colorama를 확인해보시면 좋을 것 같습니다.
    답글