파이썬 문자열 합치기 4가지 방법

문자열끼리 붙이거나, 숫자를 문자열에 합치거나, 변수 값을 문자열에 넣는 등 다양하게 문자열을 합치거나 붙이기 작업을 할 때가 있습니다. 여기에서는 파이썬 문자열 합치기 방법 4가지를 확인해 보겠습니다.

파이썬 문자열 합치기 방법 개요

파이썬 문자열 합치기 방법에는 더하기(+) 연산자, 문자열 포매팅, f-string, format() 메서드 활용의 4가지 방법이 있습니다. 순서대로 하나씩 살펴보겠습니다.

더하기(+) 연산자 활용

제일 먼저 가장 쉬운 방법인 단순하게 문자열끼리 붙이는 방법을 알아보겠습니다. 숫자 값의 덧셈 연산과 같이 더하기(+) 연산자를 사용하면 문자열끼리 붙습니다.

txt_y = "2013"
txt_m = "05"
print(txt_y + txt_m)
Python
그림 1. 파이썬 문자열 합치기: 덧셈 연산자
그림 1. 파이썬 문자열 합치기: 덧셈 연산자

이번에는 문자열에 숫자를 붙여주는 방법을 알아보겠습니다. “201305”라는 문자열에 숫자 값 11을 붙여주고 싶다면 어떻게 해야 할까요? 아래와 같이 하면 안됩니다.

txt_y = "2013"
txt_m = "05"
txt_d = 11
print(txt_y + txt_m + txt_d)
Python
그림 2. 숫자를 그냥 문자열에 붙이면 안 돼요
그림 2. 숫자를 그냥 문자열에 붙이면 안 돼요

위와 같이 바로 붙여주면 문자열을 이어 붙이는 것은 문자열끼리만 가능하다고 TypeError: can only concatenate str (not “int”) to str 오류메시지로 알려줍니다.

이럴 땐 아래와 같이 str()로 타입 캐스팅(casting)을 해 주면 원하는 결과를 얻을 수 있습니다.

txt_y = "2013"
txt_m = "05"
txt_d = 11
print(txt_y + txt_m + str(txt_d))
Python
그림 3. 파이썬 문자열 합치기: 캐스팅 사용하여 숫자를 문자열로 변환
그림 3. 파이썬 문자열 합치기: 캐스팅 사용하여 숫자를 문자열로 변환

변수 값을 문자열에 넣기: 문자열 포매팅

변수값을 깔끔하게 문자열에 넣는 방법은 없을까요? 소수점 자리수를 맞추어 출려하고 싶으신가요? C언어나 Java에서와 같이 formatter를 사용해서 문자열에 변수를 넣을 수 있습니다. C나 Java와 포맷팅 방식은 같습니다. 단, %를 사용해서 값을 매칭해 주는 부분이 파이썬의 특징이라고 할 수 있습니다.

print("%04d" % 13)
print("%10.3f" % 13.123456789)
print("%10s" % "abc")
print("%10s" % "abcd")
print("%10s" % "abcde")
print("%10s" % "abcdefghijklmnop")
Python

% 연산자는 숫자를 대상으로 할 때에는 나머지 연산을 위해 사용하지만, 문자열을 대상으로 할 때에는 문자열의 포맷을 결정할 때 사용합니다. 4자리의 숫자인 문자열을 만들되 빈자리는 0으로 채우라는 것이죠. 그래서 Line 1의 숫자 13은 0013이라는 문자열로 출력됩니다.

Line 2의 부동 소수점 값인 경우에 10.3은 총 10자리의 문자열로 하되 소수점은 3자리까지만 문자열로 취하라는 의미입니다.

Line 3~5까지는 출력할 문자열을 다르게 하고, 모두 10자리의 문자열로 취할 것을 주문했습니다. 문자열은 10자리를 취하기로 했기 때문에 10자리에 맞추어 출력합니다.

하지만 Line 6 처럼 문자열이 긴 경우에는 자르지 않고 문자열이 모두 출력되는 것을 확인할 수 있습니다.

그림 4. 파이썬 문자열 합치기: 문자열의 포맷을 지정해서 출력
그림 4. 파이썬 문자열 합치기: 문자열의 포맷을 지정해서 출력

변수 값을 문자열에 넣기: 포맷 문자열 리터럴 f-string 사용

Python에서 문자열에 변수를 넣을 때 제가 자주 사용하는 방법인데, f-string을 사용하는 방법입니다. 소문자 f나 대문자 F를 문자열 앞에 적어주고 삽입하려는 변수는 {와 } 사이에 넣어주는 방식입니다.

day = 11
value = 43.234156675
name = "David"
txt = f"{day}일 승률 {'%.3f' % value}% {name}"
print(txt)
Python

숫자나 문자열을 그냥 넣어줘도 되고, 포매팅 한 결과는 문자열이니 당연히 위에서 사용한 포매팅 방식을 혼용할 수도 있습니다.

그림 5. 파이썬 문자열 합치기: f-string 사용해서 문자열에 변수값 넣기
그림 5. 파이썬 문자열 합치기: f-string 사용해서 문자열에 변수값 넣기

변수 값을 문자열에 넣기: format() 사용하기

format을 사용하면 다양한 활용이 가능합니다. 대신에 다양한 사용법을 좀 익혀야 합니다. 하나씩 살펴보도록 하겠습니다.

{}와 format()으로 값 연결

{}를 이용해서 변수 넣을 곳 만들어주고, format()으로 값을 연결해 줄 수 있습니다. {}의 값은 format에 있는 값들로 순차적으로 채워집니다.

print("안녕하세요. {}님, 아침 메뉴는 {}입니다.".format("Naru", "한정식"))
Python

위와 같이 하면 아래 그림 6과 같이 출력된다.

그림 12. {}와 format()으로 값 연결 출력 예시
그림 6. {}와 format()으로 값 연결 출력 예시

{숫자}와 format()으로 값 연결

{0}, {1}과 같이 숫자를 넣어주면, format에서 전달하는 객체의 위치 값으로 활용할 수 있습니다. 아래 코드의 실행결과는 그림 6와 같습니다.

print("안녕하세요. {1}님, 아침 메뉴는 {0}입니다.".format("한정식", "Naru"))
Python

{인수명}과 format()의 인수명으로 값 연결

모처럼 한글인수값을 사용해볼까요? 아래와 같이 작성할 수도 있습니다. format에 인수명을 지정해서 값을 설정하고, {}안에 인수명을 적어주면 해당 인수값이 들어갑니다. 아래 코드의 실행결과는 그림 6와 동일합니다.

print("안녕하세요. {사용자}님, 아침 메뉴는 {아침식사}입니다.".format(아침식사="한정식", 사용자="Naru"))
Python

딕셔너리 format() 사용하여 출력하기

아래에는 Dictionary 형식의 데이터 meal과 learning이 있습니다. format()에서 meal은 첫번째 인수로, learning은 두번째 인수로 전달했습니다.

{} 안에서 몇 번째 인수의 어떤 키값인지를 적어주면 반영됩니다. 그리고 콜론(:) 뒤에 문자열 포맷을 적어주면 문자열에 대한 포맷팅까지 적용됩니다.

meal = {'name': '나루', 'breakfast': '한정식', 'price': 23.2}
learning = {
  'title': 'Python 문자열 붙이기',
  'desc': 'Python에서 문자열을 붙이는 다양한 방식을 배워보아요.'
}
print("안녕하세요. {0[name]}님, 아침 메뉴는 {0[breakfast]:s}, 가격은 USD {0[price]:.1f}입니다.\n그리고 오늘 학습 주제는 \"{1[title]}\"입니다.\n - 상세설명: {1[desc]}".format(meal, learning))
Python
그림 13. 딕셔너리와 format() 활용 출력 예시
그림 7. 딕셔너리와 format() 활용 출력 예시

**표기법을 사용하여 딕셔너리 키 값 바로 사용하기

여러 개의 딕셔너리도 따로 지칭할 필요 없이 그냥 키 값을 사용하는 방법으로 ** 표기법을 사용하면 됩니다. format()으로 넘겨줄 Dictionary 변수명 앞에 **을 붙여주는 것입니다. 키의 중복만 없다면 키 이름만으로 편하게 문자열을 구성할 수 있습니다. 아래의 코드도 실행하면 그림 7과 같은 출력 결과를 확인할 수 있습니다.

meal = {'name': '나루', 'breakfast': '한정식', 'price': 23.2}
learning = {
  'title': 'Python 문자열 붙이기',
  'desc': 'Python에서 문자열을 붙이는 다양한 방식을 배워보아요.'
}
print("안녕하세요. {name:s}님, 아침 메뉴는 {breakfast}, 가격은 USD {price:.1f}입니다.\n그리고 오늘 학습 주제는 \"{title}\"입니다.\n - 상세설명: {desc}".format(**meal, **learning))
Python

관련자료

파이썬 문자열 합치기 방법은 Python 문서 StringsFancier Output Formatting을 참고했습니다.

같이 읽으면 좋은 글

Leave a Comment