본문 바로가기
Python 코딩도장

파이썬 코딩도장 Unit 24 정리(2) - 문자열 서식 지정자, 포매팅 사용

by chanfficial 2022. 1. 29.

2. 문자열 서식 지정자와 포매팅 사용하기

  • 파이썬은 다양한 방법으로 문자열을 만들 수 있는데, 서식 지정자(format specifier)로 문자열을 만드는 방법과 format 메서드로 문자열을 만드는 문자열 포매팅(string formatting) 등이 있다.

- 예를 들어 학생의 이름과 평균 점수를 출력할 때, 학생이 바뀌면 이름과 점수도 바뀔것이다.

제임스의 평균 점수는 85.3점입니다.
마리아의 평균 점수는 98.7점입니다.
  • 위의 두 문자열에서 '의 평균 점수는', '점입니다.' 는 같지만 이름과 점수가 다른데, 이렇게 문자열 안에서 특정 부분을 원하는 값으로 바꿀 때 서식 지정자 또는 문자열 포매팅을 사용한다.

 

 

2-1. 서식 지정자(format specifier)로 문자열 넣기

  • 서식 지정자는 % 로 시작하고 자료형을 뜻하는 문자가 붙는다.
  • %s 는 문자열이라는 뜻이며 string의 s이다.
  • 문자열 안에 %s 를 넣고 그 뒤에 % 를 붙인 뒤 'james' 를 지정해주면 %s 부분이 'james' 로 바뀐다.('I am %s.' 와 'james' 사이의 % 는 따옴표로 묶지 않고 그대로 입력한다.)
    # '%s' % '문자열'
    >>> 'I am %s.' % 'james'
    'I am james.'​
  • 문자열을 바로 지정하지 않고 변수를 지정하는 것도 가능하다.
    >>> name = 'maria'
    >>> 'I am %s.' % name
    'I am maria.'​

 

 

2-2. 서식 지정자로 숫자 넣기

  • 숫자는 %d 를 넣고 % 뒤에 숫자를 지정하면 된다.(%d 는 10진 정수 decimal integer의 d)
    # '%d' % 숫자
    >>> 'I am %d years old.' % 20
    'I am 20 years old.'​

 

 

2-3. 서식 지정자로 소수점 표현하기

  • 실수를 넣을 때는 %f 를(고정 소수점 fixed point의 f) 사용하여 뒤에 숫자를 지정하는데, %f 는 소수점 이하 6자리까지 표시한다.
  • 소수점 이하 자릿수를 지정하고 싶다면 f 앞에 .(점)과 자릿수를 지정해주면 된다.
    # '%f' % 숫자
    >>> '%f' % 2.3
    '2.300000'
    
    # '%.자릿수f' % 숫자
    >>> '%.2f' % 2.3 # 소수점 이하 두 자리까지 출력
    '2.30'
    >>> '%.3f' % 2.3 # 소수점 이하 세 자리까지 출력
    '2.300'​

 

 

2-4. 서식 지정자로 문자열 정렬하기

  • 서식 지정자와 숫자를 조합하면 문자열을 정렬할 수 있다.
  • % 뒤에 숫자를 붙이면 문자열을 지정된 길이로 만든 뒤, 오른쪽으로 정렬하고 남는 공간을 공백으로 채운다.
    # %길이s
    >>> '%10s' % 'python' # 10자리로 지정하여 오른쪽 정렬
    '    python'​
  • 문자열 오른쪽 정렬은 자릿수가 다른 숫자를 출력할 때 유용한데, %d 와 %f 도 숫자와 조합하여 오른쪽으로 정렬할 수 있다.
    # %길이d
    >>> '%10d' % 150 # 10자리로 지정하여 오른쪽 정렬
    '       150'
    >>> '%10d' % 15000
    '     15000'​
  • 실수는 .(점) 앞에 정렬할 길이를 지정하고, 점 뒤에 소수점 이하 자릿수를 지정하면 된다.
    # %길이.자릿수f
    >>> '%10.2f' % 2.3 # 10자리로 지정하여 소수점 두 번째 자리까지, 오른쪽 정렬
    '      2.30'
    >>> '%10.2f' % 2000.3
    '   2000.30'​
  • 왼쪽 정렬은 문자열 길이에 - 를 붙여주면 된다.
    # %-길이s
    >>> '%-10s' % 'python' # 10자리로 지정하여 왼쪽 정렬
    'python    '​

 

 

2-5. 서식 지정자로 문자열 안에 값 여러 개 넣기

  • 문자열 안에 값을 두 개 이상 넣으려면 % 를 붙이고, 괄호 안에 값(변수)을 콤마로 구분해서 넣어주면 된다.(값을 괄호로 묶지 않으면 에러가 발생)
    # '%d %s' % (숫자, '문자열')
    >>> 'Today is %d %s.' % (3, 'April')
    'Today is 3 April.'​
    - 서식 지정자가 두 개이므로 값도 두 개를 넣었다.
  • 서식 지정자가 여러 개면 괄호 안의 값(변수) 개수도 서식 지정자 개수와 똑같이 맞춰주어야 한다.
  • 지금까지는 서식 지정자 사이를 공백으로 띄웠는데, 만약 서식 지정자를 서로 붙이면 결과도 붙어서 나오므로 주의해야 한다.
    >>> 'Today is %d%s.' % (3, 'April')
    'Today is 3April.'​
    - 서식 지정자를 붙여놔서 3과 'April'이 붙어서 출력되었다.

 

 

2-6. format 메서드 사용하기

  • 파이썬은 문자열을 만들 때 서식 지정자 방식보다 더 간단한 문자열 포매팅(string formatting)을 제공한다.
  • 문자열 포매팅은 { } 안에 포매팅을 지정하고 format 메서드로 값을 넣는다.
    # '{인덱스}'.format(값)
    >>> 'Hello, {0}'.format('world!')
    'Hello, world!'
    >>> 'Hello, {0}'.format(100)
    'Hello, 100'​
    - 이렇게 문자열 안에 { }를 넣고 인덱스를 지정한 다음, format()에서 { }안에 넣을 값을 지정하면 된다.

 

 

2-7. format 메서드로 값을 여러 개 넣기

  • { } 에 인덱스를 지정한 뒤 format에는 인덱스가 증가하는 순서대로 값을 넣으면 된다.
    >>> 'Hello, {0} {2} {1}'.format('Python', 'Script', 3.6)
    'Hello, Python 3.6 Script'​
    - 여기서는 {0} → {2} → {1} 처럼 인덱스 순서를 섞었고, format에는 'Python' → 'Script' → 3.6 순으로 넣었기 때문에 문자열에는 인덱스 숫자에 해당하는 값이 들어가서 'Hello, Python 3.6 Script' 의 순서로 출력된다.

 

 

2-8. format 메서드로 같은 값을 여러 개 넣기

  • 같은 인덱스가 지정된 { } 를 여러 개 넣으면 같은 값을 여러 개 넣을 수 있다.
    >>> '{0} {0} {1} {1}'.format('Python', 'Script')
    'Python Python Script Script'​

 

 

2-9. format 메서드에서 인덱스 생략하기

  • { } 에서 인덱스를 생략하면 format에 지정한 순서대로 값이 들어간다.
    >>> 'Hello, {} {} {}'.format('Python', 'Script', 3.6)
    'Hello, Python Script 3.6'​

 

 

2-10. format 메서드에서 인덱스 대신 이름 지정하기

  • { } 에 인덱스 순서가 아닌 이름을 대신 지정할 수도 있다.(format에는 이름에 해당하는 값을 지정한다.)
    >>> 'Hello, {language} {version}'.format(language='Python', version=3.6)
    'Hello, Python 3.6'​

 

 

2-11.  문자열 포매팅에 변수를 그대로 사용하기

  • 파이썬 3.6부터는 문자열을 더 간단하게 만드는 방법을 제공하는데, 변수에 값을 넣고 { } 에 변수 이름을 지정하면 된다.
  • 이때는 문자열 앞에 포매팅(formatting)이라는 뜻으로 f 를 붙인다.
    >>> language = 'Python'
    >>> version = 3.6
    >>> f'Hello, {language} {version}'
    'Hello, Python 3.6'​
     

※ 중괄호 { } 자체를 출력할 때는 { {, } } 처럼 중괄호를 두 번 사용하면 된다.

>>> '{{ {0} }}'.format('Python')
'{ Python }'

 

 

2-12. format 메서드로 문자열 정렬하기

  • 지금까지 문자열의 서식 지정자나 ljust, rjust, center로 정렬했던 것 처럼 문자열 포매팅도 문자열을 정렬할 수 있다.
  • 인덱스 뒤에 : (콜론)을 붙이고 정렬할 방향과 길이를 지정해주면 된다.
    # 왼쪽 정렬
    # '{인덱스:<길이}'.format(값)
    >>> '{0:<10}'.format('python')
    'python    '
    - '{0 :< 10}' 에서 부등호가 왼쪽을 가리키고 있으므로 문자열을 지정된 길이로 만든 뒤 왼쪽으로 정렬하고 남는 공간을 공백으로 채운다.- '>'을 넣어서 오른쪽을 가리키게 만들면 문자열을 지정된 길이로 만든 뒤 오른쪽으로 정렬하고 남는 공간을 공백으로 채운다.
  • # 오른쪽 정렬 # '{인덱스:>길이}'.format(값) >>> '{0:>10}'.format('python') ' python'​
  • 인덱스를 사용하지 않는다면 : (콜론)과 정렬 방법만 지정해도 된다.
    >>> '{:>10}'.format('python')
    '    python'​

 

2-13. 숫자 개수 맞추기

  • %d 는 % 와 d 사이에 0과 숫자 개수를 넣어주면 자릿수에 맞춰서 앞에 0이 들어간다.
  • { } 를 사용할 때는 인덱스나 이름 뒤에 : (콜론)을 붙이고 03d 처럼 0과 숫자 개수를 지정하면 된다.
    # '%0개수d' % 숫자
    # '{인덱스:0개수d'}'.format(숫자)
    >>> '%03d' % 1 # 세 자리 숫자
    '001'
    >>> '{0:03d}'.format(35) # 세 자리 숫자
    '035'​
  • 실수도 숫자 개수를 맞출 수 있는데, 소수점 이하 자릿수를 지정하고 싶으면 %08.2f 처럼 . (점) 뒤에 자릿수를 지정해주면 된다.
  • 실수는 숫자 개수에 정수 부분, 소수점, 소수점 이하 자릿수가 모두 포함된다는 점을 주의해야 한다.
    >>> '%08.2f' % 3.6
    '00003.60'
    >>> '{0:08.2f}'.format(150.37)
    '00150.37'​

 

2-14. 채우기와 정렬을 조합해서 사용하기

  • 문자열 포매팅은 채우기와 정렬을 조합해서 사용할 수 있다.
  • { } 에 인덱스, 채우기, 정렬, 길이, 자릿수, 자료형 순으로 지정해주면 된다.
    # '{인덱스:[[채우기]정렬][길이][.자릿수][자료형]}'
    # 길이를 10으로 만든 뒤 왼쪽, 오른쪽으로 정렬하고 남는 공간은 0으로 채우기
    
    >>> '{0:0<10}'.format(15)  # 길이 10, 왼쪽으로 정렬하고 남는 공간은 0으로 채움
    '1500000000'
    >>> '{0:0>10}'.format(15)  # 길이 10, 오른쪽으로 정렬하고 남는 공간은 0으로 채움
    '0000000015'​
  • 실수로 만들고 싶다면 소수점 자릿수와 실수 자료형 f 를 지정해주면 된다.
    >>> '{0:0>10.2f}'.format(15)  # 길이 10, 오른쪽으로 정렬하고 소수점 자릿수는 2자리
    '0000015.00'​
  • 채우기 부분에 0이 아닌 다른 문자(공백도 가능)을 넣어도 되고, 채우기 부분을 생략하면 공백이 들어간다.
    >>> '{0: >10}'.format(15)  # 남는 공간을 공백으로 채움
    '        15'
    >>> '{0:>10}'.format(15)   # 채우기 부분을 생략하면 공백이 들어감
    '        15'
    >>> '{0:x>10}'.format(15)  # 남는 공간을 문자 x로 채움
    'xxxxxxxx15'​

※ 금액에서 천단위로 콤마 넣기

  • format 내장 함수 사용 : format(숫자, ',')
    >>> format(1493500, ',')
    '1,493,500'​
  • format 함수와 서식 지정자를 함께 사용
    >>> '%20s' % format(1493500, ',')  # 길이 20, 오른쪽으로 정렬
    '           1,493,500'​
  • 포매팅에서 콤마를 넣으려면 : (콜론)뒤에 , (콤마)를 지정하면 된다.
    >>> '{0:,}'.format(1493500)
    '1,493,500'​
  • 정렬을 하고 싶다면 정렬 방향과 같이 뒤에 콤마를 지정해주면 된다.
    >>> '{0:>20,}'.format(1493500)  # 길이 20, 오른쪽으로 정렬
    '           1,493,500'
    >>> '{0:0>20,}'.format(1493500) # 길이 20, 오른쪽으로 정렬하고 남는 공간은 0으로 채움
    '000000000001,493,500'​