본문 바로가기
프로그래밍 언어/Python

[Python] 01. 자료형 - 문자열 포매팅

by 민졈 2022. 6. 4.

 

 

 

 

안녕하세요!!

 

이번 시간에는 문자열 포매팅을 더 활용하는 시간을 가져보도록 하겠습니다.

 

 

 

 

 

이전 포스팅에서 이야기했듯이 아래의 포맷 코드는

 

숫자와 함께 사용하면 더 유용하게 사용할 수 있습니다!

 

 

코드 설명
%s 문자열(String)
%c 문자 1개(character)
%d 정수
%f 부동소수
%o 8진수
%x 16진수
%% Literal % (문자 % 자체)

 

 

 

 

 

 

1. 정렬과 공백

 

문자열을 작성할 때 왼쪽이나 오른쪽 정렬을 해야할 때는

 

아래의 예시처럼 사용하면 됩니다.

 

"%10s" % "hi"
>>"          hi"

 

%10s는 전체 길이가 10개인 문자열 공간에서 대입되는 값을 오른쪽으로 정렬하고

 

그 앞의 나머지는 공백으로 남기라는 의미입니다.

 

반대로 왼쪽 정렬을 하고 싶을 때는 %-10s을 사용하면 되겠죠!!

 

"%-10sjane." % "hi"
>>"hi          jane"

 

이렇게 하면 hi는 왼쪽 정렬이 되고 나머지는 공백으로 채웠음을 알 수 있습니다.

 

 

 

 

 

 

 

2. 소수점 표현하기

 

원주율 3.14159265358979 라는 소수점이 있을 때

 

소수점 세 번째 자리까지만 나타내고 싶은 경우에는 아래와 같이 사용할 수 있습니다.

 

"0.3f" % 3.14159265358979
>>"3.141"

여기서 ' . '의 의미는 소수점 포인트를 말하고

 

그 뒤의 3은 소수점 뒤에 나타낼 숫자의 갯수를 말합니다.

 

 

 

 

 

 

 

1번과 2번을 응용해보도록 하겠습니다.

"%10.4f" % 3.14159265358979
>>"          3.1415"

 

소수점 넷째 자리까지만 표시하고 전체 길이를 10개로 설정해주었기 때문에

 

나머지 8 글자에는 공백을 넣어 오른쪽 정렬을 했습니다.

 

 

 

 

 

 

 

 

 

format 함수를 사용한 포매팅

 

문자열의 format 함수를 사용하면

 

좀 더 발전된 스타일로 문자열 포맷을 지정할 수 있습니다.

 

사용 방법은 간단한데요, 

 

%를 사용했던 포맷 코드와는 다르게

 

중괄호 { } 를 사용하고 .format( ) 을 사용하여

 

문자열 포맷을 지정할 수 있습니다.

 

 

 

이렇게 글자로 보면 이해가 잘 안가실테니

 

앞서 살펴본 문자열 포매팅 예제를

 

format 함수를 사용해 바꿔보도록 하겠습니다.

 

 

 

1. 숫자 대입

 

"I eat {0} apples." .format(3)
>> "I eat 3 apples."

 

 

 

2. 문자열 대입

 

"I eat {0} apples." .format("four")
>> "I eat four apples."

 

 

 

3. 2개 이상의 값 넣기

 

포맷 코드와 동일하게 여러 개의 값이 있으면

 

괄호와 순서대로 콤마( , )를 사용하여 구분해주면 되지만

 

인덱스 항목이 format 함수의 입력 값으로 순서에 맞게 바뀝니다.

 

number = 10
day = "four"
"I ate {0} apples. so I was sick for {1} days." .format(number, day)
>> "I ate 10 apples. so I was sick for four days."

 

 

 

 

4. 입력 값 사용하기

 

"I ate {number} apples. so I was sick for {day} days." .format(number=10, day=4)
>> "I ate 10 apples. so I was sick for four days."

 

위의 방법은 인덱스를 사용하는 대신 더 편리한 형태입니다.

 

하지만 {name} 형태를 사용할 경우

 

format 함수에는 반드시 name=value 와 같은 형태의 입력 값이 있어야합니다.

 

 

만약 {number}, {day}로 값을 넣었는데

 

.format(number, day=4) 이런 식으로 줬다면

 

옳지 않은 형식이기에 오류가 납니다.

 

 

 

 

 

 

그 외의 포매팅

 

1. 왼쪽, 오른쪽 정렬

" :< " 혹은 " :> "를 사용하면 각각 왼쪽, 오른쪽 정렬을 할 수 있습니다.

 

정렬의 방향은 화살표 방향을 생각하면 어느 쪽으로 정렬되는지 바로 알 수 있습니다! 

 

 

왼쪽 정렬

"{0:<10}".format("hi")"
>>"hi          "

 

오른쪽 정렬

"{0:>10}".format("hi")
>>"          hi"

 

 

 

 

2. 가운데 정렬

" :^ " 기호를 사용하면 가운데 정렬도 가능합니다!

 

"{0:^10}".format("hi")
>>"     hi     "

 

 

 

3. 공백 채우기

 

앞서 공백을 사용해 문자열 정렬을 했었는데

 

이 공백을 다른 문자로 대체할 수도 있습니다!

 

채워 넣을 문자 값은 정렬 문자 >, <, ^ 바로 앞에 넣어야합니다.

 

 

"{0:=^10}".format("hi")
>>"====hi===="

"{0:!<10}".format("hi")
>>"hi!!!!!!!!"

 

 

 

 

 

 

f 문자열 포매팅

 

파이썬 3.6 버전부터는 f 문자열 포매팅 기능을 사용할 수 있습니다.

 

name = "jane"
age = 44
f"내 이름은 {name}입니다. 나이는 {age}입니다."
>> "내 이름은 jane입니다. 나이는 44입니다."

 

위의 예시처럼 문자열 앞에 접두사 f를 붙이면

 

f 문자열 포매팅을 사용할 수 있습니다.

 

name, age와 같은 변수 값을 생성한 후에 그 값을 참조할 수 있습니다.

 

표현식을 사용하거나 정렬을 할 수도 있습니다.

 

 

표현식 사용

age = 32
f"나는 내년이면 {age+2}살이 된다."

>> "나는 내년이면 34살이 된다"

 

 

정렬

f ' {"hi" :<10}'          // 왼쪽 정렬
>> 'hi        '
f ' {"hi" :>10}'          // 오른쪽 정렬
>> '        hi'
f ' {"hi" :^10}'          // 가운데 정렬
>> '    hi    '

 

공백 채우기, 소수점 표현하기 등도

 

f 문자열 포매팅을 사용해서 표현할 수 있습니다.

 

 

 

 

 

 

 

문자열 관련 함수

 문자열 자료형은 자체적으로 함수를 가지고 있습니다.

 

이를 내장 함수라고 하는데요,

 

이 내장 함수를 사용하려면

 

문자열 변수 이름 뒤에 ' . '을 붙여 함수 명을 사용하면 됩니다.

 

 

 

 

 

 

 

1. 문자 개수 세기 (count)

 

문자열에 포함된 특정 문자의 갯수를 알려주는 함수입니다.

 

a = "happy"
a.count('p')
>> 2

 

 

 

 

2. 위치 알려주기 1(find)

 

문자열 중 특정 문자가 처음 나온 위치를 반환합니다.

 

만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환합니다.

 

a = "Python is the best programming language"
a.find('s')

>> 8
a.find('c')
>> -1

 

 

 

 

3. 위치 알려주기 2 (index)

 

find 뿐만 아니라 index로도 특정 문자의 위치를 알 수 있는데 

 

find와 다른 점은 찾는 문자나 문자열이 존재하지 않으면 오류를 발생시킵니다.

 

a = "Python is the best programming language"
a.find('s')
>> 8

a.find('c')
>> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found

 

 

 

 

4. 문자열 삽입 (join)

 

join 함수를 사용하면 문자열 뿐만 아니라 리스트, 튜플도 입력으로 사용할 수 있습니다.

 

리스트와 튜플은 나중에 자세하게 다루도록 하겠습니다!

 

",".join('abcd')
>> "a,b,c,d"

 

 

 

 

5. 소문자를 대문자로 (upper) / 대문자를 소문자로 (lower) 바꾸기 

 

upper와 lower는 각각 소문자인 문자나 문자열을 대문자로,

 

대문자인 문자나 문자열을 소문자로 바꿔줍니다.

 

a = "HI"
b = "python"


b.upper( )
>> "PYTHON"   // 소문자 python을 대문자로 변경

b.lower( )
>> "hi"   // 대문자 HI를 소문자로 변경

 

 

 

 

 

6. 왼쪽 공백 지우기 (lstrip) / 오른쪽 공백 지우기(rstrip)

 

왼쪽 공백을 지우는 lstrip는 문자열 중

 

가장 왼쪽에 있는 한 칸 이상의 연속된 공백들을 모두 지웁니다.

 

a = "  Python  "
a.lstrip( )

>> "Python  "

 

 

반대로 rstrip는 문자열 중 가장 오른쪽에 있는

 

한 칸 이상의 연속된 공백들을 모두 지웁니다.

 

a = "  Python  "
a.rstrip( )
>> "  Python"

 

대충 짐작하셨겠지만 lstrip의 l은 left를,

 

rstrip의 r은 right를 말합니다.

 

 

 

 

7. 양쪽 공백 지우기 (strip)

 

l이나 r이 아닌 그냥 strip는 양쪽의 한 칸 이상의 연속된 공백을 모두 지웁니다.

a = "  Python  "
a.strip( )
>> "Python"

 

 

 

8. 문자열 바꾸기 (replace)

 

replace는 replace(바뀌게 될 문자열, 바꿀 문자열)로 사용해서

 

문자열 안의 특정한 값을 다른 값으로 치환할 수 있습니다.

 

a = "Java is good programming language"
a.replace("Java", "Python")
>> "Python is good programming language"

 

 

 

 

9. 문자열 나누기 (split)

 

split 이라는 뜻에 알맞게 split 함수는 변수명.split( )처럼 사용하는데

 

( ) 괄호 안에 아무것도 넣지 않으면 스페이스, 탭, 엔터 등을 기준으로 문자열을 나누어줍니다.

 

이렇게 나눈 값들은 리스트에 하나씩 들어가게 됩니다.

 

a = "Life if too short"
a.split( )
>> ['Life', 'is', 'too', 'short']

b = "a:b:c:d"
b.split( ' : ' )
>> ['a', 'b', 'c', 'd']

 

 

 

 

 

 

 

 

이번 포스팅에서는 문자열 포매팅을 배움과 동시에

 

문자열 관련 함수들에 대해 배웠습니다.

 

이로서 문자열에 관련된 포스팅은 끝이 났네요!!

 

 

 

 

 

다음 포스팅에서는 오늘 여러번 언급했던

 

리스트 자료형에 대해 배워보도록 하겠습니다!!!

 

 

 

 

 

 

 

댓글