한 걸음씩 기록하며

#.3 String Formatting 본문

Python

#.3 String Formatting

Haksae 2021. 12. 20. 02:49

1. String Formatting

  • 문자열 포맷팅(String Formatting) 이란?

문자열에 특정 변수의 값을 넣어주기 위하여 사용하는 것이다. 문자열을 효율적으로 정리할 때 많이 사용한다.

 

💡 파이썬에서 문자열 포매팅 방법은 3가지가 있다.

  1. format 함수를 이용한 방법 (str.format)
  2. %와 서식기호를 이용한 방법
  3. f-string을 이용한 방법

1.1 format 함수

 

  1. format 함수 사용법
  • format 함수는 중괄호 {} 안에 포매팅을 지정하고, format 함수의 인자로 값들을 넣는다.
'{index1},{index2}'.format(값0,값1)
#예시 : 곱하기 계산기
a = 2
b = 3

s = '구구단 {0} * {1} = {2}'.format(a,b,a*b)
print(s)

2. format 함수 예제 1 (기본)

1) 직접 대입, 변수로 대입, 이름으로 대입

# 직접 대입하기
s1 = 'name : {0}'.format('blockDmask')
print(s1)

# 변수로 대입하기
age =55
s2 = 'age : {0}'.format(age)
print(s2)

#이름으로 대입하기
s3 = 'number : {num}, gender : {gen}'.format(num=1234, gen='남성')
print(s3)
name : blockDmask
age : 55
number : 1234, gender : 남성

2) format 문자열의 중괄호의 인덱스 사용

# 인덱스를 입력하지 않으면? 인자 순서대로 입력됨
s4 = 'name : {}, city : {}'.format('Block','seoul')
print(s4)

# 인덱스 순서가 바뀌면?
s5 = 'song1 : {1}, song2 :{0}'.format('park','lee')
#순서에 맞게 인자가 입력
print(s5)

#인덱스를 중복해서 입력하면?
s6 = 'test1 : {0}, test2 : {1}, test3 : {0}'.format('인덱스0','인덱스1')
# 중복되도 인자 값을 찾아간다
print(s6)
name : Block, city : seoul
song1 : lee, song2 :park
test1 : 인덱스0, test2 : 인덱스1, test3 : 인덱스0

 

3) format 함수를 사용할 때 중괄호가 나오게 하려면?

  • {{}} - 중괄호를 두번 쓰면 중괄호가 나온다. 중괄호 안에 인자가 들어가려면 세번 써야한다.
s1 = 'this is value {{{0}}}'.format(12)
print(s1)

 

3. format 함수 에제 (응용)

  • 문자열 정리하기 : 공백
s9 = 'this is {0:<30} | done {1:<15} |'.format('left','a')
print(s9)

s10 = 'this is {0:>30} | done {1:>15} |'.format('right','b')
print(s10)

s11 = 'this is {0:^30} | done {1:^15} |'.format('center','c')
print(s11)
this is left                           | done a               |
this is                          right | done               b |
this is             center             | done        c        |
  • {0:<30} 은 {0}의 값을 30자리로 표현할거다 라는 뜻이고, :<은 왼쪽 정렬을 하겠다는 것이다.
  • :^ 은 가운데 정렬을 뜻한다.
  • 문자열 정리하기 2 : 값 채우기
s12 = 'this is {0:-<30} | done {1:0<15} |'.format('left','a')
print(s12)

s13 = 'this is {0:->30} | done {1:0>15} |'.format('rigth','b')
print(s13)

s14 = 'this is {0:-^30} | done {1:0^15} |'.format('center','c')
print(s14)
this is left-------------------------- | done a00000000000000 |
this is -------------------------rigth | done 00000000000000b |
this is ------------center------------ | done 0000000c0000000 |
  • <, >, ^ 기호 앞에 특정 문자를 입력하면 공백 부분이 다른 것으로 채워진다.

3) 자리수와 소수점 표현하기

s15 = '정수 3자리 : {0:03d}, {1:03d}'.format(12345, 12)
print(s15)

s16 = '아래 2자리 : {0:0.2f}, 아래 5자리 : {1:0.5f}'.format(123.1234567, 3.14)
print(s16)
정수 3자리 : 12345, 012
아래 2자리 : 123.12, 아래 5자리 : 3.14000
  • s15 : 정수의 자리수를 표현할 때는 '0Nd'로 표현한다. N은 원하는 자릿수를 입력하면 된다. 자릿수가 부족한 경우는 자동으로 0으로 채워진다.
  • s16 : 소수점 자리수를 표현할 때는 '0.Nf'로 표현한다. N은 소수점 아래 표시할 자릿수를 입력하면 된다. 이것도 마찬가지로 남는 부분은 0으로 표시된다.

4) 구구단 프로그램

for a in range (2,4) :
    for b in range (1, 10) :
        print('{0} * {1} = {2:2}'.format(a, b, a*b))

 

#.1.2 파이썬 % 서식 기호

 

  1. 파이썬 문자열 포매팅 %에 대해서
  • %
  • % 서식 문자의 모양은, % 기호 뒤에 자료형을 가리키는 문자가 온다.
  • %s → 문자열
  • %d → 정수
  • %f → 실수
num = 50
s = 'my age %d' % num
print(s)
my age 50

%o → 8진수

%x → 16진수

%% → 문자 % 표현

 

2. % 예제

  • 문자열, 정수, 실수를 %로 포매팅 해보기
names = ['kim', 'park', 'lee']
for name in names :
    print('my name is %s' % name)

money = 10000
s2 = 'give me %d won' % money
print(s2)

d = 3.141592
print('value %f' % d)
my name is kim
my name is park
my name is lee
give me 10000 won
value 3.141592
  • 두개 이상의 변수를 포매팅 하기
s1 = 'my name is %s. age : %d' % ('haksae', 100)
print(s1)

age = 880
money = 20000
name = 'lee'
weight = 70
etc = 'soccer'
s2 = 'my name is %s, age : %d, weight : %f, money : %d, etc : %s' % (name, age, weight, money, etc)
print(s2)
my name is haksae. age : 100
my name is lee, age : 880, weight : 70.000000, money : 20000, etc : soccer
  • 출력이 많을 때는 ()을 이용하면 된다.
  • % 포맷팅은 타입을 정해주기 때문에 정확해보이지만, 불편한 점이다.

→ 이것을 개선하기 위해 str.format 형식이 나왔고, f-string이 나오게 되었다.

 

#.1.3 f-string format

 

  1. f-string이란?
  • % 포매팅과 str.fomat 방법보다 더 최근에 나온 format (python 3.6부터)
  • 선언
f'(문자열 {변수} 문자열'
  • f와 {}만 사용하면 된다.
  • 문자열 맨 앞에 f를 붙여주고, 중괄호 안에 직접 변수 이름이나 출력하고 싶은 것을 바로 넣으면 된다.
s = 'coffee'
n = 5
result1 = f'저는 {s}를 좋아합니다. 하루 {n}잔 마셔요'
print(result1)
저는 coffee를 좋아합니다. 하루 5잔 마셔요

2.  예제

  • f-string과 정렬
  • % 와 동일하다.
s1 = 'left'
result1 = f'|{s1:<15}'
print(result1)

s2 = 'center'
result2 = f'|{s2:^15}|'
print(result2)

s3 = 'right'
result3 = f'|{s3:>15}|'
print(result3)
|left           
|    center     |
|          right|
  • 중괄호 출력 방법
  • %와 동일하다.
  • {{ }} → 중괄호만 출력
  • {{{ 내용 }}} → { 내용 } 출력

3. f-string과 dictionary

d = {'name' : 'haksae', 'gender' : 'man', 'age' : 100}
result = f'my name {d["name"]}, gender {d["gender"]}, age {d["age"]}'
print(result)
my name haksae, gender man, age 100
  • f와 {dic_name["key"]}

 

4. f-string과 list

n = [100, 200, 300]

print(f'list : {n[0]}, {n[1]}, {n[2]}')

for v in n :
    print(f'list with for : {v}')
list : 100, 200, 300
list with for : 100
list with for : 200
list with for : 300
  • f와 {list_name[인덱스]}

'Python' 카테고리의 다른 글

#.6 Function & Lambda  (0) 2021.12.20
#.5 Control of Flow  (0) 2021.12.20
#.4 연산자  (0) 2021.12.20
#. 2 자료형 기본  (0) 2021.12.20
#.1 Identifier, Variable, Constant, Literal  (0) 2021.12.20
Comments