파이썬/파이썬 언어 공부

파이썬 프로그래밍(4) - 문자열 포매팅

Regain 2023. 7. 12. 19:01

#문자열 포매팅

1. 정의

  문자열 포매팅(string formatting) : 문자열 안에 어떤 값을 삽입하는 방법

>>> line = "We always have to learn more than %d hours" % 3
'We always have to learn more than 3 hours'

 

2. 대입

  문자열 안의 숫자를 넣고 싶은 자리에 %d 문자를 넣고 문장 뒤에 % 문자 다음 원하는 숫자를 넣으면 만들 수 있다.

이때 %d를 '문자열 포맷 코드'라고 부른다.

>>> line = "We always have to learn more than %s hours" % three
'We always have to learn more than three hours'

>>> time = 3
>>> line = "We always have to learn more than %d hours" % time
'We always have to learn more than 3 hours'

  물론 문자열이나 변수를 넣을 수도 있다. 이때 주의할 점은 문자열일 때 문자열 포맷 코드는 %s를 사용해야 한다.

 

3. 2개 이상의 값 넣기

>>> frequency = always
>>> time = 3
>>> line = "We %s have to learn more than %d hours" % (frequency, time)
'We always have to learn more than 3 hours'

  2개 이상의 값일 때는 마지막 % 다음 괄호를 쓰고 각각의 값을 쉼표(,)로 구분해 준다.

 

3. 문자열 포맷 코드

  문자열 포맷 코드의 종류는 다음과 같다.

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

*%s 포맷 코드를 사용하면 문자든 숫자든 모든 값을 변환해 넣을 수 있다. 하지만 숫자도 문자열로 취급하게 되니 주의.

  여기서 %%란 포맷 코드가 생소한데, 이는 '%'를 출력하기 위해 사용하기 위해 사용되는 것이다.

>> "I studied %d%%" % 70"
'I studied 70%'
 

#포맷 코드와 숫자 함께 사용

1. 정렬과 공백

>>> "%20s" % "Hello World"
'         Hello World'

  여기서 %20s는 전체 길이가 20개인 문자열 공간에서 대입되는 값(Hello World)을 오른쪽으로 정렬하고 앞의 공간을 공백으로 남긴다는 뜻이다.

 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
                    H e l l o   W o r l d
반대로 %-20s도 가능하다. 이때에는 왼쪽 정렬 후 뒤 공간을 공백으로 남긴다.
>>> "%-20s" % "Hello World"
'Hello World         '

 

2. 소수점 표현

  '%0.숫자f' (ex) %0.4f) 로 표현한다. 이때 들어가있는 '숫자'에 따라 소숫점 뒤 나올 숫자를 결정한다. 또한 정렬과 공백도 앞의 0 대신 필요한 숫자를 넣어 표현할 수 있다.
>>> "%5.2f" % 3.14159
' 3.14'

 

 

#format 함수 사용

1. 숫자, 문자열, 변수 사용

  문자열의 {0}, {1}과 같은 인덱스 항목이 format 함수의 입력값으로 순서대로 값이 입력된다.

>>> line = "We always have to learn more than {0} hours".format(3)
'We always have to learn more than 3 hours'

>>> line = "We {0} have to learn more than 3 hours".format("always")
'We always have to learn more than 3 hours'

>>> time = 3
>>> line = "We always have to learn more than {0} hours".format(time)
'We always have to learn more than 3 hours'

  그렇기에 2개 이상의 값일때는 아래와 같이 사용된다.

>>> line = "We {0} have to learn more than {1} hours".format("always", 3)
'We always have to learn more than 3 hours'

그 외에도 인덱스 항목(ex. {0}, {1})대신 {name} 형태를 사용할 수도 있다. 이때 format함수에는 반드시 name=value 형태의 입력값을 넣어야 한다.

>>> line = "We always have to learn more than {time} hours".format(time=3)
'We always have to learn more than 3 hours'

 

2. 정렬과 공백 채우기

(1) 왼쪽 정렬

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

  :<10 표현식으로 문자열을 왼쪽 정렬한 뒤, 문자열의 총 자릿수를 10으로 맞추었다.

(2) 오른쪽 정렬

>>> "{0:>10}".format("Hello")
'     Hello'

  오른쪽 정렬은 왼쪽과 반대로 ':>' 표현식을 사용한다.

(3) 가운데 정렬

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

  :^를 사용하여 가운데 정렬을 할 수 있다.

(빈칸이 홀수인 경우 왼쪽을 적은 빈칸을 주는 듯 합니다.)

(4) 빈칸 채우기

  정렬 문자 바로 앞에 채울 문자를 넣어준다.

>>> "{0:*^10}".format("Hello")
'**Hello***'

(5) 중괄호 표현하기

  format 함수를 사용할 시 중괄호({})가 사용되는데, 이 중괄호를 문자 그대로 출력하기 위해서는 2개를 연속해서 사용한다.

>>> "{{Hello}}".format{}
'{Hello}'

 

 

#f 문자열 포매팅

1. f 문자열 포매팅

  파이썬 버전 3.6부터 사용할 수 있는 기능으로 문자열 앞에 접두사 f를 붙이면 사용할 수 있다.

>>> time=3
>>> f"We always have to learn more than {time} hours"
'We always have to learn more than 3 hours'

  그 외에도 정렬과 공백 채우기도 마찬가지로 사용할 수 있다.

 

 

#문자열 관련 함수

1. 문자 개수 세기(count)

  count 함수로 문자열 중 필요한 문자가 몇개인지 알 수 있다.

>>> line = "Hello World"
>>> line.count('l')
3

 

2. 위치 찾기(find, index)

(1) find

  find 함수로 찾는 문자 중 처음으로 나온 위치를 알 수 있다. 찾는 문자가 없다면 -1을 리턴한다.

>>> line = "Hello World"
>>> line.find('e')
1
>>>line.find('z')
-1

(2) index

  index 함수 또한 찾는 문자 중 처음으로 나온 위치를 알 수 있다. 찾는 문자가 없다면 오류가 발생한다.

>>> line = "Hello World"
>>> line.index('e')
1
>>> line.index('x')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-f0ff6df68dac> in <cell line: 2>()
      1 line = "Hello World"
----> 2 line.index('x')

ValueError: substring not found

 

3. 문자열 삽입(join)

join 함수를 통해 문자열 사이에 원하는 문자를 삽입할 수 있다.

>>> "-".join('Hello')
'H-e-l-l-o'

 

4. 소문자를 대문자로 변경(upper)

  upper 함수로 소문자를 대문자로 변경할 수 있다. 모두 대문자라면 변화가 일어나지 않는다.

>>> line = "Hello World"
>>> line.upper()
'HELLO WORLD'

 

5. 대문자를 소문자로 변경(lower)

  lower 함수로 대문자를 소문자로 변경할 수 있다. 모두 소문자라면 변화가 일어나지 않는다.

>>> line = "Hello World"
>>> line.lower()
'hello world'

 

6. 공백 지우기(lstrip, rstrip, strip)

  strip 함수로 문자열의 공백을 지울 수 있다. 왼쪽 공백이라면 lstrip, 오른쪽이라면 rstrip, 양쪽 다 지우려면 strip을 사용한다.

>>> line = "   Hello   "
>>> line.lstrip()
'Hello   '

>>> line.rstrip()
'   Hello'

>>> line.strip()
'Hello'

 

7. 문자열 바꾸기(replace)

  replace 함수(replace(바뀔_문자열, 바꿀_문자열)를 사용하여 특정 문자열을 변경할 수 있다.

>>> line = "Hello World"
>>> line("Hello", "Welcome")
'Welcome World'

 

8. 문자열 나누기(split)

  split 함수를 통해 문자열을 나누어 줄 수 있다. split()처럼 괄호 안에 값이 없다면 공백을 기준으로 문자열을 나눈다. 하지만 괄호 안에 '.', '-' 등 값이 있다면 해당 값을 구분자로 하여 문자열을 나눈다.

>>> line = "Hello World"
>>> line.split()
['H', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']

>>> line.split('o')
['Hell', 'W', 'rld']

  함수를 사용하였다 하더라도 실질적으로 변수의 값을 변경하는 것은 아니다. 값을 저장하고 싶다면 다른 변수나 

'변수 = 변수.문자열 함수' 를 통해 값을 저장해야 한다.

 

 

 

(해당 자료는 '점프 투 파이썬'을 참고하여 정리하였습니다)