다운로드
작성자: admin 작성일시: 2017-05-11 16:28:11 조회수: 4447 다운로드: 312
카테고리: Python 태그목록:

파이썬의 문자열 형식화

파이썬에서는 복잡한 출력을 위한 문자열 형식화(string formatting)를 지원한다. 문자열을 형식화하는 방법에는 % 기호를 사용한 방식과 format 메서드를 사용한 방식이 있다.

% 기호를 사용한 문자열 형식화

문자열 뒤에 % 기호를 붙이고 그 뒤에 다른 값을 붙이면 뒤에 붙은 값이 문자열 안으로 들어간다.

"문자열" % 값

이 때 문자열의 어느 위치에 값이 들어가는지를 표시하기 위해 문자열 안에 % 기호로 시작하는 형식지정 문자열(format specification string)을 붙인다. 대표적인 형식지정 문자열은 다음과 같다.

형식지정 문자열 의미
%s 문자열
%d 정수
%f 부동소수점 실수

표 6.1 : 대표적인 형식지정 문자열

다음은 % 기호를 사용한 문자열 형식의 예이다.

In [1]:
"내 이름은 %s입니다." % "홍길동"
Out:
'내 이름은 홍길동입니다.'
In [2]:
"나는 %d살 입니다." % 12
Out:
'나는 12살 입니다.'
In [3]:
"원주율의 값은 %f입니다." % 3.141592
Out:
'원주율의 값은 3.141592입니다.'

만약 여러개의 값을 문자열 안에 넣어야 한다면 % 기호 뒤에 있는 값을 소괄호로 감싸야 한다.

In [4]:
"%d 곱하기 %d%d이다." % (2, 3, 6)
Out:
'2 곱하기 3은 6이다.'
In [5]:
"%s%s 과목 점수는 %d점이다." % ("철수", "수학", 100)
Out:
'철수의 수학 과목 점수는 100점이다.'

연습 문제 1

  1. nameage라는 변수에 각각 이름과 나이를 넣고 다음과 같이 출력하는 코드를 만들어라

    Tom is 13 years old
  2. a, b라는 변수에 10과 3이라는 값을 대입하라. 이 변수 a, b와 문자열 형식화를 사용하여 다음과 같은 문자열을 출력하는 코드를 만들어라.

    10 / 3 = 3.333

고급 형식지정 문자열

형식지정 문자열은 여러가지 숫자 인수를 가질 수도 있다. % 기호 다음에 오는 정수는 값이 인쇄될 때 차지하는 공간의 길이를 뜻한다. 만약 공간의 길이가 인쇄될 값보다 크면 정수가 양수일 때는 값을 뒤로 보내고 공백을 앞에 채우거나 반대로 정수가 음수이면 값을 앞으로 보내고 공백을 뒤에 채운다. 만약 % 기호 다음에 소숫점이 있는 숫자가 오면 점 뒤의 숫자는 실수를 인쇄할 때 소숫점 아래로 그만큼의 숫자만 인쇄하라는 뜻이다.

고급 형식지정 문자열 의미
%20s 전체 20칸을 차지하는 문자열(공백을 앞에 붙인다.)
%-10d 전체 10칸을 차지하는 숫자(공백을 뒤에 붙인다.)
%.5f 부동소수점의 소수점 아래 5자리까지 표시

표 3.2.2 : %방식의 고급 형식지정 문자열

In [6]:
"[%20s]" % "*"   # [와 ] 사이에 20칸의 공백이 있다.
Out:
'[                   *]'
In [7]:
"[%-20s]" % "A"  # 20칸의 공백의 앞쪽에 A를 인쇄한다.
Out:
'[A                   ]'
In [8]:
"[%20d]" % 123  # 20칸의 공백의 뒷쪽에 123을 인쇄한다.
Out:
'[                 123]'
In [9]:
"[%-20d]" % 123  # 20칸의 공백의 앞쪽에 123을 인쇄한다.
Out:
'[123                 ]'
In [10]:
x = 1 / 3.0  # 값은 0.3333333....
"%.5f" % x   # 소숫점 아래 5자리까지만 인쇄한다.
Out:
'0.33333'

공백 크기와 소숫점 아래 자릿수를 같이 지정할 수도 있다.

In [11]:
"[%-20.6f]" % x
Out:
'[0.333333            ]'

format 메서드를 사용한 문자열 형식화

format 메서드를 사용하여 문자열을 형식화할 수도 있다. 이 때는 % 기호로 시작하는 형식지정 문자열 대신 {} 기호를 사용한다. 또한 자료형을 표시할 필요가 없다.

In [12]:
"내 이름은 {}입니다.".format("홍길동")
Out:
'내 이름은 홍길동입니다.'

{}안에 값의 순서를 지정하는 숫자를 넣을 수도 있다. 가장 앞에 있는 값은 {0}, 그 뒤의 값은 {1}, 이런 식으로 지정한다. 이 방법을 사용하면 값의 순서를 바꾸거나 같은 값을 여러번 인쇄할 수도 있다.

In [13]:
"{2}{0} 점수는 {1}점입니다. {1}점! {1}점!".format("수학", 100, "철수")
Out:
'철수의 수학 점수는 100점입니다. 100점! 100점!'

format 방식에서 공백의 크기를 지정하거나 부동소수점의 소수점 아래 숫자를 지정할 때는 {}안에 : 기호를 넣고 그 뒤에 고급 형식지정 문자열을 넣는다. : 뒤에 오는 숫자는 공백의 크기를 뜻한다. <는 값을 앞쪽으로 붙이고 공백을 뒤로 붙인다. 반대로 >는 값을 앞쪽으로 붙이고 공백을 뒤로 붙인다. 소숫점의 자릿수를 지정할 때는 .(점)과 숫자, 그리고 f 글자를 사용한다. , 기호를 넣으면 영미권에서 숫자를 쓸 때 천(1000)단위마다 붙이는 쉼표(thousand comma)를 붙인다.

고급 형식지정 문자열 의미
{:10} 전체 10칸을 차지
{:>10} 전체 10칸을 차지하며 공백을 앞에 붙임
{:<10} 전체 10칸을 차지하며 공백을 뒤에 붙임
{:.5f} 부동소수점의 소수점 아래 5자리까지 표시
{:,} 천단위 쉼표 표시

표 3.2.2 : format 방식의 고급 형식지정 문자열

In [14]:
"[{:<20}]".format("*")
Out:
'[*                   ]'
In [15]:
"[{:>20}]".format(20)
Out:
'[                  20]'
In [16]:
"[{:20.5f}]".format(1 / 3)
Out:
'[             0.33333]'
In [17]:
"[{:20,}]".format(1234567890)
Out:
'[       1,234,567,890]'

연습 문제 2

  1. a, b 두 개의 변수에 3과 12라는 값을 넣고 이 변수를 사용하여 다음과 같이 세로셈으로 곱셈 결과를 출력하는 코드를 만들어라.

            3
     x     12
     --------
           36
  2. a, b 두 개의 변수에 "123456"과 "7890"라는 값을 넣고 이 변수를 사용하여 다음과 같이 세로셈으로 덧셈 결과를 출력하는 코드를 만들어라. 천의 자리 쉼표를 표시해야 한다.

        123,456
     +    7,890 
     ----------
        131,346

질문/덧글

본문 오타 관련 njis*** 2019년 2월 23일 2:27 오후

안녕하세요.
{:>10}는 전체 10칸을 차지하는 숫자(공백을 뒤에 붙인다.)라고 적혀있는데 뒤가 아니라 앞인거 같습니다!
{:,} 는 부동소수점의 소수점 아래 5자리까지 표시라고 적혀있는데 영미권에서 숫자를 쓸 때 천(1000)단위마다 붙이는 쉼표인거 같습니다~~

답변: 본문 오타 관련 관리자 2019년 2월 23일 7:25 오후

수정하였습니다. 지적 감사드립니다.