-
반응형
이번 주제는 문자열 포맷팅(Formatting) 입니다.
문자열 과 변수를 적절하게 섞어서 원하는 출력 문자열을 만들 경우 많이 사용합니다.
예를 들면 “사과는 과일입니다.” 여기서 사과라는 말을 다른 과일로 대체하여 망고 또는 배가 될 수 있습니다.
사과만 다른 과일명으로 대체합니다. 이럴 경우 사용합니다.
여기서 문자만 대체 하는 것이 아니고 “국어 점수는 80점 입니다.” 여기서 학생마다 점수는 다르기 때문에 숫자만 변경 하기를 원할 경우등에 사용 될 수 있습니다.
즉 문자열 포맷팅이란 문자열안에 어떤 갓을 삽입 또는 대체 하는 방법입니다.
C언어의 printf() 와 비슷하게 사용되는데 파이썬 3 버전 부터는 format() 이란 메소드 사용을 권장합니다.
C언어에 익숙하신 분들을 위해 먼저 예전 방법을 설명을 하고 그 다음 format() 에 대해 다루어 보면서 비교해 보겠습니다.
아직 파이썬에서 아래 방법을 지원하고 있습니다.
## 직접 숫자를 넣었습니다.
>>> "국어 점수는 %d 점 입니다" % 80
'국어 점수는 80 점 입니다’
## 변수 선언을 해서 넣었습니다.
>>> x = 80
>>> "국어 점수는 %d 점 입니다." % x
## 직접 문자를 넣었습니다.
'국어 점수는 80 점 입니다.'
>>> "%s는 과일입니다." % '사과'
'사과는 과일입니다.’
## 변수 선언을 해서 넣었습니다.
>>> x = '사과'
>>> "%s는 과일입니다." % x
'사과는 과일입니다.'위의 예에서 숫자와 문자가 % 다음에 d와 s가 다르게 온다는 사실을 알았습니다.
%d 는 숫자이고 %s는 문자열 입니다.
이외에도 여러가지 자료형에 대해 % 다음에 오는 형태가 다릅니다.
포맷팅 코드라고 하는데 이것에 대해 정리해봅니다.
% Operator 설명 %d 정수 %f 부동소수 %o 8진수 %x 16진수 %s 문자열 %% % 자체 >>> "원주율은 %f 입니다" % 3.14
'원주율은 3.140000 입니다'
>>> "원주율은 %s 입니다." % 3.14
'원주율은 3.14 입니다.'
>>> "원주율은 %d 입니다." % 3.14
'원주율은 3 입니다.'
>>> "합격율은 %d%% 입니다" % 88
'합격율은 88% 입니다'
>>>두개 이상의 값을 넣을 경우 입니다.
>>> "%s 점수: %d 점" % ( '국어', 99 )
'국어 점수: 99 점'
>>> x = '수학'
>>> y = 60
>>> "%s 점수: %d 점" % ( x, y )
'수학 점수: 60 점'
>>>위의 예제 중 3.14를 부동소수로 표현 할 경우 3.140000 이렇게 표현 된 것을 볼 수 있었습니다.
그러면 소숫자리를 제어하고 싶어질 것 입니다.
또한 숫자는 우측 정렬하여 출력하고 싶을 것입니다. % 와 operator 사이에 숫자를 적절히 사용하여 할 수 있습니다.
## 10자 중 빈 공간은 공백으로 채우고 우측 정렬
>>> "파이썬 버전은 %10s 입니다." % 3.6
'파이썬 버전은 3.6 입니다.’## 10자 중 빈 공간은 공백으로 채우고 좌측 정렬
>>> "파이썬 버전은 %-10s 입니다." % 3.6
'파이썬 버전은 3.6 입니다.’## 소수점 2 자리까지 표현
>>> "원주율은 %0.2f 입니다." % 3.14159
'원주율은 3.14 입니다.’>>> "원주율은 %10.2f입니다" % 3.14159
'원주율은 3.14입니다'
>>> "원주율은 %-10.2f입니다." % 3.14159
'원주율은 3.14 입니다.'이제 파이썬 3 버전 부터 지원하는 더 발전된 형태의 format() 메소드에 대한 내용입니다.
## {0}은 fortmat 다음에 첫번째 인수 입니다. 직접 값을 입력 가능합니다.
>>> "{0} 점수는 {1}점 입니다.".format( '국어', 88 )
'국어 점수는 88점 입니다.’## 키=value 형식으로도 가능합니다. 가독성이 좀 더 좋아지겠지요!
>>> "{gamok} 점수는 {value}점 입니다.".format( gamok='국어', value=88 )
'국어 점수는 88점 입니다.'
>>> gamok='국어'
>>> value=88
>>> "{0} 점수는 {1}점 입니다.".format( gamok, value )
'국어 점수는 88점 입니다.'Format()을 사용하면서 이전에 해본 좌우측 정렬을 해 보겠습니다. Format은 가운데 정렬도 됩니다.
## 좌측 정렬로 10칸중 나머지는 공백으로 채웁니다. :<숫자 표현을 더 쓰면 됩니다.
>>> "원주율은 {0:<10} 입니다.".format( 3.14 )
'원주율은 3.14 입니다.’## 우측 정렬이므로 > 로만 바꾸어 줍니다.
>>> "원주율은 {0:>10} 입니다.".format( 3.14 )
'원주율은 3.14 입니다.’## 가운데 정렬은 ^를 사용합니다.
>>> "원주율은 {0:^10} 입니다.".format( 3.14 )
'원주율은 3.14 입니다.’## 소수점 표현입니다. 전체 10 자리이고 기본 우측 정렬이며, 소수점 2 자리 사용하라는 뜻입니다.
>>> "원주율은 {0:10.2f} 입니다.".format( 3.14159 )
'원주율은 3.14 입니다.'
>>> "원주율은 {0:>10.2f} 입니다.".format( 3.14159 )
'원주율은 3.14 입니다.’## 좌측 정렬로 바꿉니다.
>>> "원주율은 {0:<10.2f} 입니다.".format( 3.14159 )
'원주율은 3.14 입니다.'
>>> "원주율은 {0:^10.2f} 입니다.".format( 3.14159 )
'원주율은 3.14 입니다.’## 10자리로 소수점 2자리 우측 정렬이며 나머지는 0으로 채웁니다.
>>> "원주율은 {0:0>10.2f} 입니다.".format( 3.14159 )
'원주율은 0000003.14 입니다.‘## 특정 문자로 빈 공간을 채울 경우 : 다음에 채울 문자를 써 주면 됩니다.
>>> "원주율은 {0:=>10} 입니다.".format( 3.14 )
'원주율은 ======3.14 입니다.'
>>> "원주율은 {0:=^10} 입니다.".format( 3.14 )
'원주율은 ===3.14=== 입니다.'
>>>파이썬 3.6 부터 지원하는 f 포매팅이 있습니다.
이것의 좋은 점은 포매팅하면서 연산도 가능합니다.
문자열 앞에 f 라고 붙이면 됩니다.
>>> value = 88
>>> f"원주율은 {value+1} 입니다."
'원주율은 89 입니다.’>>> gamok = '국어'
>>> value = 90
>>> f"{gamok} 과목 점수는 {value+10} 점 입니다"
'국어 과목 점수는 100 점 입니다'
>>>응용편으로 f 포매팅에서 딕셔너리로 사용하는 법을 알아보고
또한 정렬하는 법에 대해서도 같이 예제를 들어 보겠습니다.
## 딕셔너리 정의 입니다.
>>> x = { 'gamok': '국어', 'value' : 88.1234 }## 딕셔너리로 사용하는 예제 입니다.
>>> f'{x["gamok"]} 과목 점수는 {x["value"]} 점 입니다'
'국어 과목 점수는 88.1234 점 입니다’## 정렬과 소수점 표현등의 예제 입니다. Format 과 사용법은 동일 합니다.
>>> f'{x["gamok"]:<10} 과목 점수는 {x["value"]:10.2f} 점 입니다'
'국어 과목 점수는 88.12 점 입니다'
>>> f'{x["gamok"]:=^10} 과목 점수는 {x["value"]:0<10.2f} 점 입니다'
'====국어==== 과목 점수는 88.1200000 점 입니다'
>>> f'{x["gamok"]:=^10} 과목 점수는 {x["value"]:0>10.2f} 점 입니다'
'====국어==== 과목 점수는 0000088.12 점 입니다'
>>>지금까지 문자열 포맷팅하는 방법에 대해 포스팅 하였습니다.
많이 사용되는 내용입니다. 그리고 가장 최신에 사용하는 방법으로 사용하는 것을 권장 드립니다.
다음 포스팅은 아직 포스팅 못한 문자열에 대한 메소드를 포스팅 예정입니다.
반응형'IT 이야기 공간 > 프로그램 언어' 카테고리의 다른 글
파이썬 다양한 메소드(함수)로 문자열 치환 및 삽입하기 (0) 2020.06.11 파이썬 다양한 메소드(함수)로 문자열 판별 확인하기 (0) 2020.06.10 파이썬 다양한 메소드(함수)로 문자열 찾기 (0) 2020.06.08 파이썬 다양한 메소드(함수)로 문자열 나누기, 대소문자 변환, 정렬하기 (0) 2020.06.04 파이썬 기초 데이터 유형 – 집합 ( Set ) 자료형 (0) 2020.06.03