티스토리 뷰

시작에 앞서 본 내용은 학습 내용을 기록하기 위함이며 내용에 틀린 점이 있을 수 있으니 이점 유의 부탁드립니다.


 

문자열 포맷팅
Formatted String

문자열 포맷팅이란?
  • 문자열안에 원하는 어떤 값 또는 계산된 값을 삽입하여 문자열로 사용하기 위한 방법
  • 이를 문자열 보간법이라고도 한다.

문자열 포맷팅 방법
Python에는 3가지의 문자열 포맷팅 방법이 있으며 이는 아래와 같다

1. 고전적인 문자열 포맷팅(Classic String Format)

>>> blog_name = 'F7 project'
>>> visit_num = 20

>>> print('Blog : "%s"의 방문자 수는 %d 입니다.' %(blog_name, visit_num))
Blog : "F7 project"의 방문자 수는 20 입니다.

2. 문자열 포맷 함수(str.format() Method)

>>> blog_name = 'F7 project'
>>> visit_num = 20

>>> print('Blog : "{0}"의 방문자 수는 {1} 입니다.'.format(blog_name, visit_num))
Blog : "F7 project"의 방문자 수는 20 입니다.

3. f-string (Python 3.6 부터 사용 가능)

>>> blog_name = 'F7 project'
>>> visit_num = 20

>>> print(f'Blog : "{blog_name}"의 방문자 수는 {visit_num} 입니다.')
Blog : "F7 project"의 방문자 수는 20 입니다.


서식 지정 축약어
Format Specification Mini-Language

시작에 앞서
본 내용은 f-string을 기반으로 작성되었습니다.

용어 설명
필드(Field) : 특정 데이터를 보관(save)하는 지정된 영역을 지칭하는 단어
                      *데이터베이스에서는 열(Column)을 지칭 한다.

필드 너비(Field Width) :
 데이터를 보관하는데 필요한 테두리의 크기를 지칭하는 단어로, 단위로서 표기된다.
                                         본 내용에서 필드 너비는 포맷 서식이 지정된 문자열의 길이로 표기되었다.

필드너비(Field Width) 지정
  • ' : ' : 서식을 지정 한다는 표기 및 필드너비 설정이 가능 하다.
# 변수 선언
>>> num = 10

# 별도의 필드너비를 입력하지 않아도 필드너비는 0이 Default이다.
>>> print(f'{num:}')
'10'

>>> print(f'{num:0}')
'10'

# 필드너비(field width) 10
>>> print(f'{num:10}')
'        10'

부호 옵션(sign options)
숫자형에 유효한 옵션
음수, 양수를 설정에 따라 부호 ' - ', ' + '로 표기 한다.

  • ' - ' : 음수 부호만 표기
# 변수 선언
>>> positive_num = +10
>>> negative_num = -10

# 별도의 부호 옵션을 입력하지 않아도 - 음수 부호만 표기가 Default이다.
>>> print(f'" - " 사용 | Positive : "{positive_num :-}" | Negative : "{negative_num :-}"')
" - " 사용 | Positive : "10" | Negative : "-10"

>>> print(f'" - " 사용 | Positive : "{positive_num :}" | Negative : "{negative_num :}"')
" - " 사용 | Positive : "10" | Negative : "-10"

  • ' + ' : 음수, 양수 부호 모두 표기
# 변수 선언
>>> positive_num = +10
>>> negative_num = -10

# -, + 음수, 양수 모두 부호로 표기한다.
>>> print(f'" + " 사용 | Positive : "{positive_num :+}" | Negative : "{negative_num :+}"')
" + " 사용 | Positive : "+10" | Negative : "-10"

  • 스페이스 : 양수는 공백(Space)한칸을, 음수는 부호로 표기
# 변수 선언
>>> positive_num = +10
>>> negative_num = -10

# - 음수 부호는 표기되며, + 양수의 경우 빈칸(Space)로 표기된다.
>>> print(f'" 스페이스 " 사용 | Positive : "{positive_num : }" | Negative : "{negative_num : }"')
" 스페이스 " 사용 | Positive : " 10" | Negative : "-10"

정렬 옵션(alignment options)
출력 서식 옵션(정렬)
정의된 필드너비를 기준으로 정렬 하는 출력 형식 옵션

  • ' > ' : 오른쪽 정렬(Default)
# 변수 선언
>>> name = 'F7project'

# 별도의 정렬 옵션을 입력하지 않아도 오른쪽 정렬이 Default이다.
>>> print(f'오른쪽 정렬 : "{name:>20}"')
오른쪽 정렬 : "           F7project"

>>> print(f'오른쪽 정렬 : "{name:20}"')
오른쪽 정렬 : "           F7project"

  • ' < ' : 왼쪽 정렬
# 변수 선언
>>> name = 'F7project'

>>> print(f'왼쪽 정렬 : "{name:<20}"')
왼쪽 정렬 : "F7project           "

  • ' ^ ' : 가운데 정렬
# 변수 선언
>>> name = 'F7project'

>>> print(f'가운데 정렬 : "{name:^20}"')
가운데 정렬 : "     F7project      "

  • ' = ' : 채움, 채움 옵션은 숫자형만 사용 가능하다.
# 변수 선언
>>> num = 10

# = 부호 앞에 입력할 문자를 입력한다.
# 단, 한자리 문자만 입력 가능하다. Ex :A=10 (O), :AB=10 (X)
>>> print(f'채움 : "{num:#=20}"')
채움 : "##################10"

# 0으로 채울 시 ' = '을 생략하고 필드너비에 입력하여 사용 가능하다.
>>> print(f'필드너비 020 : "{num:020}"')
필드너비 020 : "00000000000000000010"

# 채움 옵션은 정렬옵션에서도 사용가능하다.(이 방법은 문자열도 가능하다.)
>>> print(f'채움 가운데 정렬 : "{num:#^20}"')
채움 가운데 정렬 : "#########10#########"

문자열 표기
  • ' s ' : 문자열의 기본 표기 방법이며, 생략 가능하다.
# 변수 선언
>>> name = 'F7 project'

# 별도의 문자열 표기 옵션을 입력하지 않아도 문자열 표기가 Default이다.
>>> print(f'문자열 표기 : "{name:s}"')
문자열 표기 : "F7 project"

>>> print(f'문자열 표기 : "{name:}"')
문자열 표기 : "F7 project"

숫자 표기
  • ' e ' : 과학적 표기, 계수 구분문자 가 소문자로 표기된다.
# 변수 선언
>>> num = 0.1

#  과학적 표기 소문자
>>> print(f'과학적 표기 e : "{num:e}"')
과학적 표기 e : "1.000000e-01"

  • ' E ' :과학적 표기, 계수 구분문자 가 대문자로 표기된다.
# 변수 선언
>>> num = 0.1

#  과학적 표기 대문자
>>> print(f'과학적 표기 E : "{num:E}"')
과학적 표기 E : "1.000000E-01"

  • ' f ' : 고정 소수점 표기, nan 또는 inf를 소문자로 표기한다.
# 변수 선언
>>> num = 0.1
>>> num_inf = float('inf')
>>> num_nan = float('nan')

# 고정 소수점 표기, 소수점 6자리가 Default이다.
>>> print(f'고정 소수점 표기 f : "{num:f}"')
고정 소수점 표기 f : "0.100000"

# 고정 소수점 3자리
>>> print(f'고정 소수점 표기 3자리 f : "{num:.3f}"')
고정 소수점 표기 3자리 f : "0.100"

# 소문자 inf
>>> print(f'inf f : "{num_inf:f}"')
inf f : "inf"

# 소문자 nan
>>> print(f'nan f : "{num_nan:f}"')
nan f : "nan"

  • ' F ' : 고정 소수점 표기, ' f '와 기능은 같으나, nan 또는 inf를 대문자로 표기한다.
# 변수 선언
>>> num_inf = float('inf')
>>> num_nan = float('nan')

# 대문자 inf
>>> print(f'inf F : "{num_inf:F}"')
inf F : "INF"

# 대문자 nan
>>> print(f'nan F : "{num_nan:F}"')
nan F : "NAN"

  • ' g ' : 범용 표기, 주어진 정밀도 수에 대해 숫자의 자리수를 기준으로 올림 하여 표기 한다.
# 변수 선언
>>> num = 123_456_789
>>> num_float = 123.456789
>>> num_zero_float = 123.000000
>>> num_inf = float('inf')
>>> num_nan = float('nan')

# 범용 표기, 정밀도 6이 Default이다.
>>> print(f'범용 표기 g : "{num:g}"')
범용 표기 g : "1.23457e+08"

# 정밀도 2
>>> print(f'범용 표기 정밀도 .2g : "{num:.2g}"')
범용 표기 정밀도 .2g : "1.2e+08"

# 소수, 정밀도 4
>>> print(f'범용 표기 소수 정밀도 .4g : "{num_float:.4g}"')
범용 표기 소수 정밀도 .4g : "123.5"

# 정밀도에 0이 포함되어 있다면 0은 생략된다.
>>> print(f'범용 표기 소수 정밀도 .4g : "{num_zero_float:.4g}"')
범용 표기 소수 정밀도 .4g : "123"

# inf, nan은 정밀도에 영향을 받지 않는다.
# 소문자 inf
>>> print(f'inf g : "{num_inf:g}"')
inf g : "inf"

# 소문자 nan
>>> print(f'nan g : "{num_nan:g}"')
nan g : "nan"

  • ' G ' : ' g '와 기능은 같으나, nan 또는 inf를 대문자로 표기한다.
# 변수 선언
>>> num_inf = float('inf')
>>> num_nan = float('nan')

# 대문자 inf
>>> print(f'inf G : "{num_inf:G}"')
inf G : "INF"

# 대문자 nan
>>> print(f'nan G : "{num_nan:G}"')
nan G : "NAN"

  • ' n ' : 실행중인 환경의 설정을 기반으로 적절한 숫자 구분 문자를 삽입하여 표기 한다는 점을 제외하면 ' g '와 같다.
Python을 실행중인 환경의 설정들을 기반으로 표기된다.

  • ' % ' : 백분율 표기, 숫자에 100이 곱해진 값을 고정 소수점 표기에 %기호를 붙여 표기 한다.
# 변수 선언
>>> num = 0.65

# 백분율 표기, 고정 소수점 표기에 %기호를 붙여 표기하기 때문에 소숫점 6자리가 Default이다.
>>> print(f'백분율 표기 % : "{num:%}"')
백분율 표기 % : "65.000000%"

정수 표기
  • ' b ' : 2진법으로 숫자를 변환하여 표기 한다.
# 변수 선언
>>> num = 10

# 2진법
>>> print(f'2진법 b : "{num:b}"')
2진법 b : "1010"

  • ' c ' : 정수를 해당 유니코드 문자로 변환하여 표기 한다.
# 변수 선언
>>> num = 44032

# 유니코드 문자
>>> print(f'유니코드 c : "{num:c}"')
유니코드 c : "가"

  • ' d ' : 정수, 10진법으로 숫자를 표기 한다.(Default)
# 변수 선언
>>> num = 10

# 10진법, 별도의 옵션을 입력하지 않아도 10진법 표기가 Default이다.
>>> print(f'10진법 d : "{num:d}"')
10진법 d : "10"

>>> print(f'10진법 d : "{num:}"')
10진법 d : "10"

  • ' o ' : 8진법으로 숫자를 변환하여 표기 한다.
# 변수 선언
>>> num = 10

# 8진법
>>> print(f'8진법 o : "{num:o}"')
8진법 o : "12"

  • ' x ' :  16진법으로 숫자를 변환하여 표기 하며,
                9보다 큰 경우 소문자를 사용하여 표기 한다.
# 변수 선언
>>> num = 10

# 16진법 소문자
>>> print(f'16진법 x : "{num:x}"')
16진법 x : "a"

  • ' X ' : 16진법으로 숫자를 변환하여 표기 하며,
                9보다 큰 경우 대문자를 사용하여 표기 한다.
# 변수 선언
>>> num = 10

# 16진법 대문자
>>> print(f'16진법 X : "{num:X}"')
16진법 X : "A"

변환 유형 표기
  • ' # ' : 각 변환된 표기에 유형을 추가하여 표기 한다.
# 변수 선언
>>> num = 10

# 2진법 + 변환 유형
>>> print(f'2진법 + 변환 유형 #b : "{num:#b}"')
2진법 + 변환 유형 #b : "0b1010"

# 8진법 + 변환 유형
>>> print(f'8진법 + 변환 유형 #o : "{num:#o}"')
8진법 + 변환 유형 #o : "0o12"

# 16진법 + 변환 유형
>>> print(f'16진법 + 변환 유형 #X : "{num:#X}"')
16진법 + 변환 유형 #X : "0XA"

자리수 표기
  • ' , ' : 1000자리를 기준으로 쉼표(' , ')가 입력된다. (Python 3.1 부터 사용 가능)
# 변수 선언
>>> num = 1000000

# Python 3.1 버전 부터 쉼표(',')로 구분하여 숫자형을 표기가 가능해졌다.
>>> print(f'{num:,}')
1,000,000

  • ' _ ' : 1000자리를 기준으로 언더바(' _ ')가 입력된다. (Python 3.6 부터 사용 가능)
# 변수 선언
>>> num = 1000000

# Python 3.6 버전 부터 언더바('_')로 구분하여 숫자형을 표기가 가능해졌다.
>>> print(f'{num:_}')
1_000_000

  • ' . ' : 소수점 자리수 표기
# 변수 선언
>>> num = 100.1234

# 소수점 2자리 까지 표기
>>> print(f'{num:.2f}')
100.12

# 필드너비 10으로 지정 후, 빈칸 '#'으로 채우기
# 소수점 까지 포맷 필드너비로 포함되기 때문에, '#'이 4개가 표기된걸 확인할 수 있다.
>>> print(f'{num:#=10.2f}')
####100.12


TIP
사용 예제

 

Tip
  • 필드너비 변수로 받아 활용 하기
# 변수 선언
>>> num = 10
>>> star = '*'

# 필드너비를 변수로 할당 받아 피라미드 그리기
>>> for i in range(1, num+1, 2):
        print(f'{star*i :^{num}}')
    *     
   ***    
  *****   
 *******  
*********

  • 필드너비 동적으로 활용 하기
# 변수 선언
>>> num = 10
>>> star = '*'

# 필드너비를 변수로 할당 받아 대각선 그리기
>>> for i in range(1, num+1, 2):
        print(f'{star :>{i}}')
*
  *
    *
      *
        *

  • 코딩테스트 : 프로그래머스 Kakao 2018 [1차] 비밀지도
def solution(n: int, arr1: list, arr2: list) -> list:
    answer = []
    
    for i in zip(arr1, arr2):
        # 2진수 변환 및 필드너비를 n으로 설정, 0으로 채움
        # 0이 먼저 오는 경우 int로 변환시 0이 지워짐에 따라 앞자리에 더미 수 2 추가
        bin1 = int(f"{f'{i[0]:0{n}b}':2>{n+1}}")
        bin2 = int(f"{f'{i[1]:0{n}b}':2>{n+1}}")

        # [1:] 슬라이싱을 통해 더미 수 제거
        sum_bin = f'{bin1+bin2}'[1:]

        # replace를 사용하여 문자열 변경
        sum_bin = sum_bin.replace('2', '1')  # '2' -> '1'
        sum_bin = sum_bin.replace('1', '#')  # '1' -> '#'
        
        # '0' -> ' ' 변환 및 answer에 append
        answer.append(sum_bin.replace('0', ' '))
        
    return answer
 


참고 자료

Python Documantion - Common string operations

string — Common string operations — Python 3.9.13 documentation

string — Common string operations Source code: Lib/string.py String constants The constants defined in this module are: string.ascii_letters The concatenation of the ascii_lowercase and ascii_uppercase constants described below. This value is not locale-

docs.python.org

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함