TIL

TIL. 16 문자열 서식 지정자 및 포매팅 사용하기

codermun 2020. 10. 24. 20:55
728x90
반응형

## 문자열 안에서 특정부분을 원하는 값으로 바꿀때 서식 지정자 또는 문자열 포매팅을 사용한다

## 서식 지정자로 문자열 넣기

## %s % '문자열' 구조

## %s 는 문자열 이라는 뜻으로 string의 s 이다.

## 당연히 문자열로 바로 지정하지 않고 변수로 지정할 수도 있다.

 

print('I am %s' % 'muntari'

:: I am muntari

 

name = 'sheemun'

print('I am %s' % name)

:: I am sheemun


## 서식 지정자로 숫자 넣기

## %d % 숫자 구조

## %d 는 숫자 라는 뜻으로 10진 정수 decimal integer 의 d 이다.

## 당연히 숫자를 바로 지정하지 않고 변수로 지정할 수도 있다.

 

print('I am %d years old' % 29)

:: I am 29 years old

 

age = 29

print('I am %d years old' % age)

:: I am 29 years old


## 서식 지정자로 소수점 표현하기

## %f % 숫자 구조

## %f 는 실수 라는 뜻으로 fixed point 의 f 이다.

## 기본 소수점 아래 6자리로 디폴트가 되어있으며 %.2f , %.4f 로 소수점 자리를 제한할 수 있다.

 

print('현재 기온은 %f도 입니다' % 19.2)

:: 현재 기온은 19.200000도 입니다

 

print('현재 기온은 %.1f도 입니다' % 19.2)

:: 현재 기온은 19.2도 입니다

 

tem = 19.8

print('현재 기온은 %.2f도 입니다.' % tem)

:: 현재 기온은 19.80도 입니다.


## 서식 지정자를 사용해서 문자열 정렬하기

## %길이s % '문자열'

## %길이s  //  %-길이s 

## %뒤에 숫자를 붙이면 해당 숫자 만큼의 길이로 된 문자열을 만든 후 정렬하고자하는 문자열을 정렬하고 나머지는 공백 으로 채움

## 디폴트 값 오른쪽 정렬로 - 를 붙혀줄 경우 왼쪽 정렬되며 나머지를 공백 으로 채운다.

 

print('%10s' % 'python')

::: '    python'

## %10s 를 '' "" 등으로 감싸줘야함

 

print('%-10s' % 'python')

:: 'python    '


## 서식 지정자를 사용해 문자열 안에 값 여러개 넣기

## 문자열 안에 값 여러개를 넣기 위해선 %s % '문자열' 구조에서 '문자열'에 괄호 와 함께 ,(콤마)를 사용해줘야한다.

 

print('Today is %d %s' % (3, 'April'))

:: Today is 3 April

 

print('Today is %d%s' % (3'April'))

:: Today is 3April

## %d 와 %s 사이에 공백을 넣어주지 않으면 그대로 출력되기 때문에 주의하자


## 문자열 포매팅 사용하기

## 문자열 안에서 특정부분을 원하는 값으로 바꿀때 서식 지정자 또는 문자열 포매팅을 사용한다!

## Python에서는 서식 지정자보다 더 편리한 문자열 포매팅 (string formatting)을 제공한다.

 

## format method

## {인덱스}.format(값) 구조

 

print('hellow {0}'.format('world!'))

:: 'hellow world!'

 

print('hellow {0}'.format(20000))

:: 'hellow 20000'


## 값 여러개 넣기

## 인덱스 순서 주의!

 

print('hellow {0} {2} {1}'.format('python''script'3.8))

:: 'hellow python 3.8 script'

 

print('hellow {} {} {}'.format('python''script'3.8))

:: 'hellow python script 3.8'


## 인덱스 값을 지정하지 않고 공백으로 기입하는 경우 지정한 값이 순서대로 들어가게 된다.

## 같은 값을 여러번 넣기도 가능

 

print('{0} {0} {1} {1}'.format('배고파''배곺'))

:: 배고파배고파배곺배곺

:: 배고파 배고파 배곺 배곺

## {} 사이에 공백을 적어주지 않는 한 그대로 출력됨을 주의하자.


## method 사용시 인덱스가 아닌 이름을 지정할 수 있다.

 

print('hellow {lan} {ver}'.format(lan = 'python'ver = 3.8))

:: hellow python 3.8

 

## 당연히 이름이 아닌 변수를 사용할수도 있다

## 변수를 사용할 경우 문자열 앞에 formatting 이라는 뜻의 f를 붙혀줘야 정상 동작한다.

## f'문자열 {} {}'

 

lan = 'python'

ver = 3.8

 

print('hellow {lan} {ver}')

:: hellow {lan} {ver}



print(f'hellow {lan} {ver}')

:: hellow python 3.8

 


## format method 를 이용해 문자열 정렬하기

## '{인덱스 : < 길이}'.format(값) 구조

## 인덱스 뒤에 :(콜론)을 붙이고 길이를 지정해주면 길이 만큼의 문자열이 생성되고 나머지는 공백 으로 채움

## 부등호 < (왼쪽부터 채운다는 의미로 왼쪽 정렬)  // > (오른쪽부터 채운다는 의미로 오른쪽 정렬)

 

print('{0:<10}'.format('python'))

:: 'python    '

### 여기서 {0 : < 10} 가독성을 좋게하기 위해 띄어쓰기를 할 경우 error이다, 질문하도록 하자

 

print('{0:>10}'.format('python'))

:: '    python'

 

print('{:<10}'.format('python'))

: 'python    '

## 인덱스를 지정하지 않고 정렬방향만 정해줄수도 있다!!


## format method 를 이용한 숫자 개수 맞추기

## 숫자 갯수 맞추기 (정수)

## '%0개수d' % 숫자 구조 1

## '{인덱스:0개수d}'.format(숫자) 구조 2

 

print('%03d' % 1)

:: 001

## %03d 에서  0을 다른 숫자나 문자로 바꾸면 정상 동작하지 않는다.

## %03d 에서 개수 == 3 은 자리수를 나타내는것으로 000 세자리를 만든 후 d 자리의 숫자 1을 오른쪽에서 부터 채운다!

## 디폴트 오른쪽 

 

print('{0:03d}'.format(1))

:: 001


## 숫자 갯수 맞추기 (실수)

## '%0개수.자리수f' % 실수

## {인덱스:0개수.자리수f}.format(실수)

## 소수점(.)도 공간(?)을 하나 차지한다는것을 주의하자

 

print('%08.2f' % 3.6)

:: 00003.60

## 총 8자리 만큼의 공간(?)을 만든다

## 0 1 2 3 4 5 6 7 의 공간이 있다고 가정하다 

## .2 로 소수점 2짜리까지 출력하는 것으로 하였으므로 5번 인덱스 자리에 소수점(.)을 위치시키고 양옆에 3.6을 위치시킨다.

## 0 1 2 3 (3 . 6 0) <-- 이렇게 오른쪽에서 부터 실수를 채운 후 나머지 공간을

0 으로 채움 (0자리를 지울경우 공백으로 채움)

## 디폴트 오른쪽

print('{0:08.2f}'.format(150.37))

:: 00150.37

## 총 8자리 만큼의 공간(?)을 만든다

## 0 1 2 3 4 5 6 7 의 공간이 있다고 가정하다 

## .2 로 소수점 2짜리까지 출력하는 것으로 하였으므로 5번 인덱스 자리에 소수점(.)을 위치시키고 양옆에 150.37을 위치시킨다.

## 0 1 (1 5 0 . 3 7) <-- 이렇게 오른쪽에서 부터 실수를 채운 후 나머지 공간을 공백 으로 채움

## 디폴트 오른쪽


## format method에서 채우기와 정렬 조합해서 사용하기

## '{인덱스:채우기 정렬 길이 .자리수 자료형}'.format(값) 구조

 

print('{0:0<10}'.format(15))

:: 1500000000

 

print('{0:x<10}'.format(15))

:: 15xxxxxxxx

## 인덱스 : 0 , 채우기 : 0 (다른문자 가능), 정렬 : < or > , 길이 : 10

 

print('{0:0<10.3f}'.format(15.11))

:: 15.1100000

## 인덱스 : 0 , 채우기 : 0 (다른문자 가능), 정렬 : < or > , 길이 : 10, 자리수 : .3 (소수3째자리까지), 자료형: f(실수)



print('{0: <10}'.format(15))

:: '15        '

 

print('{0:<10}'.format(15))

:: '15        '

## 채우기 자리에 공백 또는 아무것도 넣지 않을 경우 공백 으로 채움!

 

출처 : dojang.io/

 

코딩 도장

 

dojang.io

 

728x90
반응형