728x90


1. 표현식 기반 문자열 조합
2. 메소드 기반_format 메소드


1. 표현식 기반 문자열 조합

 

 

타입 지시자 내용 예시
%s '%s' 에 문자열을 넣는다 s = 'Hello! %s ' % 'World'
print(s) #Hello! World 
%d '%d' 에 정수를 넣는다 d = 'Score : %d' % 90
print(d) #Score : 90
%f '%f' 에 실술르 넣는다 f = 'PI is %f' % 3.141

 

* 문자열에 있는 타입지시자에 있는 값들에 대체할 값들을 튜플에 넣어준다. 튜플에 있는 값들이 타입지시자에 순서대로 대입되며 기본적으로 타입지시자의 데이터 타입과 일치해야한다,
* 튜플에 있는 값과 타입지시자의 데이터 타입이 일치하지 않는다면 오류가 발생하지만, 정수 -> 실수, 실수 -> 정수, 정수/실수 -> 문자열. 세가지 경우에는 파이썬이 자동형변환을 시켜준다. 실수 -> 정수 케이스의 경우에는 데이터 손실이 발생한다.
* 튜플 대신 딕셔너리에 대입할 값을 넣는 것도 가능하다. 이때, 데이터는 문자열에서 딕셔너리에 있는 데이터는 '%(key)타입지시자' 의 형태로 불러옴( ex. %(name)s )

 

# 딕셔너리로 문자열 출력

dict = {'name': 'June', 'score': 100}
print('%(name)s의 점수는 %(score)d' % dict) #June의 점수는 100

 

세밀한 문자열 조합 지정
% [flags] [width] [.precision]f
flags 0 #빈 공간에 숫자 0으로 채움
- #왼쪽에 정렬
+ #부호가 함께 출력
t1 = 'PI : %07.2f' % 3.141
print(t1)
#PI : 0003.14

t2 = 'PI : %-7.2f' % 3.141
print(t2)
#PI : 3.14   
# 결과과 왼쪽 정렬되어있고 뒤에 3자리 빈공간이 확보됨

t3 = 'PI : %+7.2f' % 3.141
print(t3)
#PI :   +3.14
width 폭, 어느 정도의 넓이를 확보하고 출력할지를 결정 t1 = 'PI : %05.2f' % 3.141
print(t1)
# PI : 03.14

t2 = 'PI : %06.2f' % 3.141
print(t2)
# PI : 003.14

t3 = 'PI : %07.2f' % 3.141
print(t3)
# PI : 0003.14
precision 정밀도, 소수 이하 몇째 자리까지 출력할지 결정
.자릿수f
t1 = 'PI : %06.1f' % 3.141
print(t1)
# PI : 0003.1

t2 = 'PI : %06.2f' % 3.141
print(t2)
# PI : 003.14

t3 = 'PI : %06.3f' % 3.141
print(t3)
# PI : 03.141




2.  메소드 기반_format 메소드

 

* format 메소드를 호출 해 문자열에 원하는 값을 대입
* 문자열에 있는 { }에는 format 메소드의 인자를 넘버링한 값(0부터 시작)이 들어갈 수 있고, 이름으로 대체할 수도 있다. 이름으로 대체하는 경우는 아래 예시로 설명을 대체
* format 메소드의 인자를 순서대로 문자열 { } 에 대입하는 경우에는 번호를 부여하지 않아도 된다.
* format 메소드의 인자로 리스트 객체를 '*객체명'으로 전달하면 언패킹이 진행되고 리스트에 있는 값들이 차례대로 문자열 { }에 대입됨.
* format 메소드의 인자로 딕셔너리 객체를 전달할 수도 있음. 이 때, value값을 갖고 오기 위해서는 '{0[key]}.format(obj_dict)' 의 형태를 취함

# 넘버링을 생략
s1 = 'Hi {}, How are u ? this is your {}'
ft = s1.format('June', 'Car')
print(ft) # Hi June, How are u ? this is your Car

# 넘버링을 한 경우
s2 = 'Hi {1}, How are u ? this is your {0}'
ft = s2.format('June', 'Car')
print(ft) # Hi Car, How are u ? this is your June

# 넘버링 대신 이름을 사용
s3 = 'Hi {name}, How are u ? this is your {thing}'
ft = s3.format(name='June', thing='Car')
print(ft) # Hi June, How are u ? this is your Car
# 리스트 언패킹
check_list = ['a', 'b', 'c', 'd']
s1 = 'A : {}, B : {}, C : {}, D : {}'.format(*check_list)
print(s1)  # A : a, B : b, C : c, D : d

# 딕셔너리 객체를 인자로 전달
check_dict = {'key_A': 'value_abc', 'key_B': 'value_bcd', 'key_C': 'value_cde', 'key_D': 'value_def'}
s2 = 'value = {0[key_A]}'.format(check_dict)
print(s2)  # value = value_abc

 

세밀한 문자열 조합 지정
{ 0:[flags] [width] [.precision]f }
flags < # 왼쪽으로 붙혀 출력
^ # 가운데 정렬해 출력
> # 오른쪽으로 정렬해 출력

#0: 와 flags 기호사이에 문자가 존재한다면 빈공간을 해당 문자로 채움
s1 = '{0:<6.2f}'.format(3.141)
print(s1)
#3.14  

s2 = '{0:^6.2f}'.format(3.141)
print(s2)
# 3.14 

s3 = '{0:>6.2f}'.format(3.141)
print(s3)
#  3.14

s4 = '{0:!>6.2f}'.format(3.141)
print(s4)
#!!3.14
width 폭, 어느 정도의 넓이를 확보하고 출력할지를 결정 s1 = '{0:4.2f}'.format(3.141)
print(s1)
#3.14

s2 = '{0:5.2f}'.format(3.141)
print(s2)
# 3.14

s3 = '{0:6.2f}'.format(3.141)
print(s3)
#  3.14
precision 정밀도, 소수 이하 몇째 자리까지 출력할지 결정
.자릿수f
s1 = '{0:.1f}'.format(3.141)
print(s1)
#3.1

s2 = '{0:.2f}'.format(3.141)
print(s2)
#3.14

s3 = '{0:.3f}'.format(3.141)
print(s3)
#3.141

 

728x90

+ Recent posts