이번에는 문자열 포매팅에 대해서 알아보도록 합시다.
문자열 포매팅
먼저 아래와 같은 문자열이 있다고 생각해봅시다.
"내 나이는 20살 입니다."
이후에 시간이 지나 21살이 되면 문자열을 아래와 같이 바꿔야 합니다.
"내 나이는 21살 입니다."
이럴 때 두 문장에서 다른 부분은 20과 21이라는 두 숫자뿐인데, 이렇게 문자열 내의 특정한 값을
바꿔야 할 경우에 사용하는 것이 바로 문자열 포매팅입니다.
문자열 포매팅이란 문자열 내에 어떤 값을 삽입하는 방법이라고 할 수 있는데, 예제로 확인하면서 알아봅시다.
print("내 나이는 %d살 입니다." %20)
print("내 나이는 %d살 입니다." %21)
위의 예제에서는 문자열에서 숫자를 입력할 곳에 %d라는 문자를 넣어주고, 문자열이 끝나는 따옴표 뒤에
%숫자를 적어주면 %d자리에 해당 숫자가 들어가게 됩니다. 여기서 %d를 문자열 포맷 코드라고 부릅니다.
다음은 숫자가 아닌 문자열을 삽입해보도록 합시다.
print("i'm %s years old" %"twenty")
print("i'm %s years old" %"twenty-one")
이외에도 변수를 삽입할 수도 있습니다.
age = 20
print("내 나이는 %d살 입니다." %age)
age = 21
print("내 나이는 %d살 입니다." %age)
또한 2개 이상의 값을 넣고싶다면, 아래와 같이 %뒤의 괄호에 콤마(,)로 구분하여 값을 넣어주시면 됩니다.
print("내 나이는 %d살이고, 성별은 %s입니다." %(21, "남자"))
이렇게 문자열 포매팅을 하는 방법에 대해서 알아봤는데, 잘 보시면 문자열과 숫자의 경우 문자열 포맷 코드가
서로 다른 것을 알 수 있습니다. 이 문자열 포맷 코드는 해당 데이터의 자료형에 따라 달라지게 되는데, 표로 확인해 봅시다.
여기서 주의 깊게 봐야 할 것은 %s포맷 코드입니다.
이 코드는 어떤 형태의 값이든 포매팅하여 문자열에 삽입할 수 있습니다.
정수 3의 경우 %d를 사용하고, 실수 3.322의 경우 %f를 사용하지만, %s를 사용할 경우
자동으로 뒤에 있는 데이터를 문자열로 바꾸기 때문에 어떤 형태든 상관없다고 한 것입니다.
출력 시 정렬, 소수점 이하 출력
이러한 포맷 코드를 사용하면 출력할 텍스트를 더 세세하게 조작할 수 있습니다.
print("%10s" %"Hello")
위와 같이 문자열 포맷 코드에서 %뒤에 숫자를 적어주게 되면 출력시에 해당 숫자만큼
왼쪽에 공백을 추가하고, 문자열을 오른쪽으로 정렬하여 출력해줍니다.
반대로 문자열을 왼쪽으로 정렬하고 오른쪽에 공백을 추가하고 싶은 경우엔 음수를 적어주시면 됩니다.
print("%0.3f" %3.2356)
실수의 경우 %뒤에 소수점 몇 번째 자리까지 표현할 건지 지정할 수 있습니다.
위의 코드의 경우 소수점 3번째 자리까지 표현한다는 의미이며, 본래 데이터가 이를 넘어가면 그다음 소수점 자리,
위에선 4번째 소수점 자리에서 반올림합니다.
두 가지 방법을 보시면 %뒤에 숫자를 적을 때, 소수점 이상의 경우 출력값의 정렬과 공백의 숫자를 지정하는 부분이고,
소수점 이하의 경우 출력 시 소수점 몇 번째 자리까지 출력할 것인지 지정할 수 있다는 것을 알 수 있습니다.
이런 방법들을 사용하시면 문자열을 더 유연하게 다루실 수 있을 겁니다.
또한 위에서 말한 방법 외에도 문자열을 포매팅하는 방법이 또 있습니다.
위처럼 %를 사용해서 하는 것이 아니고 {숫자}의 형태로 사용하는 것입니다.
str = "Hello, my name is {0}, i'm {1} years old."
print(str.format("홍길동", 20))
기본적인 형태는 포맷 코드를 사용할 때와 비슷합니다.
포매팅 하려는 부분에 {숫자}를 입력하고 문자열의 뒤에 .format(삽입할 값)과 같이 적어주시면 됩니다.
이때 {}안의 숫자는 0,1,2등 순차적으로 넣을 수 있고, 이때 문자열에서 무조건 가장 작은 숫자가 앞에 와야하는건 아닙니다.
str = "Hello, my name is {1}, i'm {0} years old."
print(str.format("홍길동", 20))
이렇게 문자열에서 {1}이 먼저 오게 할 수도 있습니다.
또한 foramt의 ()안에 있는 값이 저 숫자에 따라 자리를 맞춰서 들어가게 됩니다.
()안에서 가장 앞에 있는 값이 문자열의 {0}에, 그 다음 값이 {1}에, 이런식으로 계속해서 들어갑니다.
또한 숫자 외에도 단어를 선택해서 지정할 수도 있습니다.
str = "hello my name is {name}, i'm {age} years old"
print(str.format(name = "홍길동", age = 20))
위와 같이 사용하면 어떤 부분에 어떤 값을 대입할 지 지정할 수 있습니다.
이 방법은 숫자를 사용하는 방법과 함께 혼용하여 사용할 수 있습니다.
이외에도 더 유용한 사용법들이 있는데, 좀 더 알아봅시다.
1. 왼쪽 정렬
print("'{0:<10}'".format("hello"))
위와 같이 사용하면 총 10칸을 미리 잡아둔 뒤, 이곳에 들어갈 값을 왼쪽 정렬합니다.
2. 오른쪽 정렬
print("'{0:>10}'".format("hello"))
반대로 오른쪽으로 정렬하고 싶다면 꺽쇠괄호를 반대쪽으로 해주시면 됩니다.
3. 가운데 정렬
print("'{0:^10}'".format("hello"))
그리고 가운데로 정렬하고 싶다면 꺽쇠괄호 대신 '^'를 사용하시면 됩니다.
4. 공백 채우기
또한 위와 같은 정렬 시 문자열의 공백을 다른 문자로 채울 수도 있습니다.
print("'{0:=^10}'".format("hello"))
위와 같이 정렬기호 앞에 채우고 싶은 문자를 적어주시면 됩니다.
이때 주의하실 점은 채울 문자는 한 문자만 가능하다는 것입니다.
예를 들어 0:==^10과 같은 형태는 불가능합니다.
이번 글은 이정도로 마치도록 하겠습니다.
감사합니다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
파이썬 10. 리스트 (0) | 2020.09.21 |
---|---|
파이썬 9. 문자열 함수 (0) | 2020.09.18 |
파이썬 7. 문자열 슬라이싱 (0) | 2020.09.18 |
파이썬 6. 문자열 연산 (0) | 2020.09.18 |
파이썬 5. 문자열 (0) | 2020.09.18 |