Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

4 문자열

Updated: 18 mrt 2026

현대 프로그래밍 언어에서 가장 핵심적으로 사용되는 자료형 중 하나가 문자열**string이다. 문자열은 단순히 텍스트를 표현하는 도구를 넘어, 데이터 과학과 인공지능 분야에서 데이터를 다루는 출발점이 된다.

예를 들어, ChatGPT, Gemini, Claude 등과 같은 대규모 언어 모델(LLM, Large Language Model) 기반 인공지능은 방대한 텍스트 데이터를 학습하여 의미를 추출하고 새로운 문장을 생성한다. 이처럼 고급 AI 시스템에서도 문자열은 기본 자료형으로 활용된다. 하지만 데이터 과학 입문 단계에서는 LLM보다는 일상적인 데이터 분석 작업에서 문자열을 다루는 능력이 훨씬 더 중요하다.
왜냐하면 데이터 과학자가 처음 접하는 데이터는 숫자뿐 아니라 텍스트 형태가 많기 때문이다.

문자열은 다음과 같은 기초 분석 작업에서 필수적으로 사용된다.

  • 데이터 정제Data Cleaning

    • 불필요한 공백 제거, 대소문자 통일, 특수문자 처리

    • 예: " Seoul, ""seoul"

  • 데이터 분리와 결합

    • 문자열을 특정 기준으로 나누거나 다시 합치는 작업

    • 예: "홍길동,30,서울"["홍길동", "30", "서울"]

  • 탐색과 필터링

    • 특정 단어가 포함된 데이터만 추출하거나 조건에 맞는 데이터를 선별

    • 예: 고객 리뷰 중 "불만"이라는 단어가 포함된 항목만 추출

  • 패턴 인식

    • 정규 표현식(Regular Expression)을 활용해 이메일 주소, 전화번호, 날짜 등 특정 형식을 가진 데이터를 찾아내는 작업

    • 예: "2026-01-31" 형태의 날짜 추출

  • 텍스트 요약 및 기본 통계

    • 단어 빈도수 계산, 가장 많이 등장하는 키워드 확인

    • 예: 리뷰 데이터에서 "맛있다"라는 단어가 몇 번 등장했는지 세기

결론적으로 데이터 과학 입문 단계에서 문자열을 충분히 이해하고 다루는 연습은 매우 중요하다.

  • 문자열 처리 능력이 있어야 데이터셋을 정제하고 분석 가능한 형태로 변환할 수 있다.

  • 이후 자연어 처리(NLP), 감성 분석, 문서 분류 등 고급 분석 기법으로 나아가기 위한 기초가 된다.

따라서 파이썬 문자열 자료형과 친숙해지는 일은 단순한 프로그래밍 학습을 넘어, 데이터 과학자로 성장하기 위한 첫걸음이라 할 수 있다.

4.1빈 문자열

어떤 문자나 기호도 포함하지 않은 문자열 ''은 빈 문자열이라 부른다. 빈 문자열을 만드는 방법은 다음 세 가지 방법이 있다.

empty_str1 = ''
empty_str2 = ""
empty_str3 = str()

빈 문자열을 출력하면 아무 것도 보이지 않는다.

print(empty_str1)

4.2화이트 스페이스

화이트 스페이스whitespace는 화면상 보이지는 않지만 엄연히 하나의 기호로 취급되는 여백을 가리키는 문자다.

파이썬 6종의 화이트 스페이스를 제공한다.화이트 스페이스 각각의 기능은 다음과 같다.

기호기능
' '스페이스space
'\t'tab
'\n'줄 변경new line
\r캐리지 리턴carriage return
'\v' 또는 '\x0b'수직탭vertical tab
'\f' 또는 '\x0c'폼피드form feed

이중에 스페이스, 줄 변경, 탭 세 종류의 화이트 스페이스가 가장 많이 사용되며, 다른 화이트 스페이스는 여기서는 다루지 않는다. 아래 코드를 실행했을 때의 결과를 보고 세 종류의 화이트 스페이스가 문자열 출력에 어떤 기능을 갖는지 확인하기 바란다.

print(' 1\n2\t3')
 1
2	3

4.3len() 함수

문자열의 길이, 즉 문자열에 포함된 기호의 개수를 반환한다.

len('apple')
5
len('hello, world!')
13
len('파이썬 재밌게 배우는 중?')
14

화이트 스페이스는 모두 하나의 기호로 간주된다.

len('\n')
1
len('\t')
1
len('\\')
1

빈 문자열의 길이는 0이다.

len('')
0

4.4이스케이프 시퀀스

큰따옴표로 감싸인 문자열에 작은따옴표가 포함될 수 있다. 이는 큰따옴표를 이용한 문자열의 시작과 끝이 작은따옴표가 포함되었음에도 불구하고 명확하기 때문이다.

fan_python = "I'am a fan of python."
print(fan_python)
I'am a fan of python.

동일한 이유로 작은따옴표로 감싸인 문자열이 큰따옴표를 포함할 수 있다.

me_too = '나도 "그렇다" 라고 답했다.'
print(me_too)
나도 "그렇다" 라고 답했다.

반면에 큰따옴표로 감싸진 문자열에 큰따옴표를, 작은따옴표로 감싸진 문자열에 작은따옴표를 그냥 사용할 수는 없다. 이유는 문자열의 끝이 명확하지 않기 때문이다.

fan_python_1 = 'I'am a fan of python.'
  Cell In[13], line 1
    fan_python_1 = 'I'am a fan of python.'
                                         ^
SyntaxError: unterminated string literal (detected at line 1)
me_too_1 = "나도 "그렇다" 라고 답했다."
  Cell In[14], line 1
    me_too_1 = "나도 "그렇다" 라고 답했다."
                    ^
SyntaxError: invalid syntax

위와 같은 오류를 방지할 수 없는 경우가 있다. 예를 들어 아래의 경우처럼 큰따옴표와 작은 따옴표가 모두 사용되는 경우가 그렇다.

"I've also said "yes"!"

또는

'I've also said "yes"!'

이런 경우엔 이스케이프 문자를 사용한다. 이스케이스 문자escape character는 특별한 기능을 수행하는 문자의 기능을 해체시키는 기능을 갖는 문자다.

파이썬은 백슬래시 기호 \ (또는 원화 기호 ₩)를 이스케이프 문자로 사용하며 주요 용도는 다음과 같다.

이스케이프 활용의미
\'작은따옴표 기호 자체
\"큰따옴표 기호 자체
\\백슬래시(원화) 기호 자체
\n줄바꿈
\t탭추가

즉, 이스케이프 문자와 함께 사용하면 인용부호 자체, 이스케이프 문자 자체, 줄바꿈, 탭추가 문자를 문자열에 제한 없이 사용할 수 있다.

인용부호 활용

print() 함수는 이스케이프 문자의 기능을 적절히 반영해서 화면에 출력한다.

said_yes_1 = "I\'ve also said \"yes\"!"
print(said_yes_1)
I've also said "yes"!
said_yes_2 = 'I\'ve also said \"yes\"!'
print(said_yes_2)
I've also said "yes"!

백슬래시(원화) 기호

백슬래시(원화) 기호를 이스케이프 문자의 기능이 아닌 백슬래시(원화) 기호 자체로 문자열에 포함시키고자 할 때는 백슬래시(원화) 기호를 두 번 연속 사용한다.

using_backslash = '백슬래시(원화) 기호 \\는 이스케이프 문자를 만들 때 사용함.'

\\에서 첫째 백슬래시(원화) 기호는 이스케이프 기능으로, 둘째 백슬래시(원화) 기호는 백슬래시(원화) 기호 자체로 이해된다.

print(using_backslash)
백슬래시(원화) 기호 \는 이스케이프 문자를 만들 때 사용함.

줄바꿈

\n은 줄바꿈을 의미하는 이스케이프 문자다.

two_lines = '첫째줄\n둘째줄.'

print() 함수를 이용하면 실제 의도한 대로 두 줄로 표현된다.

print(two_lines)
첫째줄
둘째줄.

탭 추가

\t는 두 문자열 사이에 탭을 추가하는 이스케이프 문자다. 탭은 보통 네 개의 스페이스키를 누르는 것에 해당한다.

using_tabs = '하나\t둘\t셋'

print() 함수를 이용하면 탭이 두 번 사용되었음을 확인할 수 있다.

print(using_tabs)
하나	둘	셋

4.5날 문자열

특수 문자에 대해 백슬래시(원화) 기호를 사용할지 여부를 고민하는 대신에 날 문자열raw string을 사용해서 인용부호와의 충돌 문제를 해결할 수도 있다.

문자열 앞에 가공되지 않았다 라는 의미를 뜻하는 영어 단어 raw 의 첫 글자인 r을 추가하면 날 문자열이 된다. 날 문자열은 특수 문자들의 기능을 모두 무시한다.

print(r"Hello\ World")
Hello\ World
print(r"Hello\n World")
Hello\n World
print(r"Hello\t World")
Hello\t World

날 문자열은 특히 파일과 폴더의 경로를 작성할 때 유용하다.

  • 일반 문자열

print('C:\some\name')
C:\some
ame
<>:1: SyntaxWarning: invalid escape sequence '\s'
<>:1: SyntaxWarning: invalid escape sequence '\s'
/tmp/ipykernel_2498301/3441249919.py:1: SyntaxWarning: invalid escape sequence '\s'
  print('C:\some\name')

주의사항: SyntacWarning은 경고일 뿐이지 오류가 아니다. 경고는 권장사항에 어긋난다 정도로 이해한다.

  • 날 문자열 사용: 특수 문자 기능 없음

print(r'C:\some\name')
C:\some\name

4.6문자열 포매팅

문자열 포매팅string formatting은 문자열 내부에 확정되지 않은 값을 가리키는 표현식을 사용할 수 있도록 한다. 문자열 포매팅을 처리하는 여러 방식이 있지만 여기서는 가장 편리한 방식인 f-문자열f-string의 활용법만 소개한다.

f-문자열

f-문자열은 문자열 앞에 f를 붙이며, 문자열 중간에 중괄호 {}로 감싸인 표현식을 사용할 수 있다. 예를 들어, 아래 코드는 nameage 두 변수를 이용한 표현식을 문자열에 포함시킨다. 그러면 nameage 가 가리키는 값에 따라 다른 문자열이 지정된다.

name = '강현'
age = 3
s = f'{name}의 나이는 {age}살이다.'
print(s)

s1 = f'{name}의 동생은 {age - 2}살이다'
print(s1)
강현의 나이는 3살이다.
강현의 동생은 1살이다

표현식이 가리키는 값이 변함에 따라 출력되는 문자열도 달라진다.

name = '정우'
age = 10
s = f'{name}의 나이는 {age}살이다.'
print(s)

s1 = f'{name}의 동생은 {age - 2}살이다'
print(s1)
정우의 나이는 10살이다.
정우의 동생은 8살이다

문자열 좌우 정렬 출력

출력되는 문자열이 차지하는 총 길이를 지정하고 좌우로 정렬시킬 수 있으며, 길이가 다른 여러 개의 문자열을 출력할 때 매우 유용하다. 아래 코드는 총 10칸의 자리를 이용할 때 길이가 2인 문자열을 좌, 우, 중앙에 위치시키는 방법을 소개한다.

s1 = 'hi'
s2 = 'hello'
  • 왼쪽으로 정렬

print(f'{s1:<10}')
print(f'{s2:<10}')
hi        
hello     
  • 오른쪽으로 정렬

print(f'{s1:>10}')
print(f'{s2:>10}')
        hi
     hello
  • 중앙에 정렬

print(f'{s1:^10}')
print(f'{s2:^10}')
    hi    
  hello   

정렬 후 남은 빈 자리를 지정된 문자로 채울 수 있다.

  • + 기호로 채우기

print(f'{s1:+<10}')
print(f'{s2:+<10}')
hi++++++++
hello+++++
  • 0 기호로 채우기

print(f'{s1:0>10}')
print(f'{s2:0>10}')
00000000hi
00000hello
  • - 기호로 채우기

print(f'{s1:-^10}')
print(f'{s2:-^10}')
----hi----
--hello---

부동소수점 자릿수 지정

부동소수점의 소수점 이하 자릿수를 지정하려면 {표현식:.1f} 와 같은 형식을 사용한다.

num1 = 17.153742
num2 = 2.778
  • 소수점 이하 한 자리까지만 출력

print(f'소수점 둘째 자리에서 반올림: {num1:.1f}')
print(f'소수점 둘째 자리에서 반올림: {num2:.1f}')
소수점 둘째 자리에서 반올림: 17.2
소수점 둘째 자리에서 반올림: 2.8
  • 소수점 이하 두 자리까지만 출력

print(f'소수점 셋째 자리에서 반올림: {num1:.2f}')
print(f'소수점 셋째 자리에서 반올림: {num2:.2f}')
소수점 셋째 자리에서 반올림: 17.15
소수점 셋째 자리에서 반올림: 2.78
  • 소수점 이하 세 자리까지만 출력

print(f'소수점 넷째 자리에서 반올림: {num1:.3f}')
print(f'소수점 넷째 자리에서 반올림: {num2:.3f}')
소수점 넷째 자리에서 반올림: 17.154
소수점 넷째 자리에서 반올림: 2.778

부동소수점 전체가 차지하는 자릿수를 지정하려면 {표현식:15.2f} 와 같은 형식을 사용한다. 칸이 남을 경우 빈자리로 남긴다.

print(f'총 15칸을 차지할 때: {num1:15.2f}')
print(f'총 15칸을 차지할 때: {num2:15.2f}')
총 15칸을 차지할 때:           17.15
총 15칸을 차지할 때:            2.78

앞서 언급한 좌우 정렬, 기호로 채우기 등도 가능하다.

print(f'총 15칸 사용: {num1:<15.5f}')
print(f'총 15칸 사용: {num2:<15.5f}')
총 15칸 사용: 17.15374       
총 15칸 사용: 2.77800        
print(f'총 15칸 사용: {num1:0<15.5f}')
print(f'총 15칸 사용: {num2:0<15.5f}')
총 15칸 사용: 17.153740000000
총 15칸 사용: 2.7780000000000
print(f'총 15칸 사용: {num1:^15.5f}')
print(f'총 15칸 사용: {num2:^15.5f}')
총 15칸 사용:    17.15374    
총 15칸 사용:     2.77800    
print(f'총 15칸 사용: {num1:-^15.5f}')
print(f'총 15칸 사용: {num2:-^15.5f}')
총 15칸 사용: ---17.15374----
총 15칸 사용: ----2.77800----
print(f'총 15칸 사용: {num1:>15.5f}')
print(f'총 15칸 사용: {num2:>15.5f}')
총 15칸 사용:        17.15374
총 15칸 사용:         2.77800
print(f'총 15칸 사용: {num1:+>15.5f}')
print(f'총 15칸 사용: {num2:+>15.5f}')
총 15칸 사용: +++++++17.15374
총 15칸 사용: ++++++++2.77800

4.7문자열 인덱싱

문자열은 문자와 기호들 사이의 순서가 절대적으로 중요하다. 문자열 왼편에 위치한 항목부터 차례대로 0, 1, 2, 3 등의 인덱스index를 부여받는다. 인덱스를 이용하여 문자열에 포함된 정보를 확인하고 추출한다.

인덱스의 대표적인 활용법이 문자열 인덱싱indexing이다. 인덱싱은 인덱스를 이용하여 문자열의 항목을 확인한다. 설명을 위해 아래 문자열을 이용한다.

colors = 'red, blue, yellow'
  • 0 번 인덱스 값

colors[0]
'r'
  • 3 번 인덱스 값

colors[3]
','

인덱스를 문자열 오른쪽에서부터 차례대로 -1, -2, -3 등 음수로 지정할 수도 있다.

  • 오른쪽 끝에 위치한 문자

colors[-1]
'w'
  • 오른쪽 끝에 두 번째 문자

colors[-2]
'o'

문자열의 길이에 따라 사용할 수 있는 인덱스의 구간이 정해진다. colors 변수가 가리키는 문자열은 길이가 17이기에 0부터 16까지의 정수 또는 -1부터 -17까지의 정수만 인덱스로 사용할 수 있다.

len(colors)
17

-17보다 작거나 16보다 큰 경우 IndexError 오류가 발생한다.

colors[50]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Cell In[54], line 1
----> 1 colors[50]

IndexError: string index out of range
colors[-20]
---------------------------------------------------------------------------

IndexError                                Traceback (most recent call last)

Cell In[11], line 1

----> 1 colors[-20]



IndexError: string index out of range

4.8문자열 슬라이싱

인덱스의 특정 구간에 속하는 부분 문자열을 추출할 때 슬라이싱slicing을 사용한다. 슬라이싱은 다음과 같이 실행한다.

문자열[시작인덱스:끝인덱스:보폭]

시작과 끝은 슬라이싱 구간의 시작과 끝 인덱스를 가리키며 보폭은 항목 선택 규칙을 지정한다.

  • 시작인덱스 : 시작 인덱스부터 문자 확인

  • 끝인덱스 : 끝 인덱스 이전까지의 문자 확인

  • 보폭: 시작 인덱스부터 몇 보폭씩 건너뛰며 문자를 추출할지 결정. 보폭의 크기가 1이면 생략 가능.

colors에서 red를 추출하고 싶다면 다음과 같이 하면 된다. 이유는 r의 인덱스는 0이고, d의 인덱스는 2이기 때문이다.

colors = 'red, blue, yellow'

colors[0:3]
'red'

보폭을 1로 지정해도 동일한 결과를 얻는다.

colors[0:3:1]
'red'

colors에서 5번 인덱스의 문자인 b부터 끝까지 하나씩 건너 뛰면서 추출하려면 다음과 같이 한다.

colors[5:len(colors):2]
'bu,ylo'

양의 정수와 음의 정수를 섞어서 인덱스로 사용할 수 있다. -1은 오른쪽 끝의 문자를 가리키는 인덱스임에 주의한다.

colors[5:-1:2]
'bu,ylo'

슬라이싱 인덱스의 기본값

시작인덱스, 끝인덱스, 보폭 각각의 인자는 경우에 따라 생략될 수도 있다. 그럴 때는 다음과 같이 지정된 기본값이 적용된다.

  • 시작인덱스의 기본값 : 0

  • 끝인덱스의 기본값 : 문자열의 길이

  • 보폭의 기본값 : 1

  • colors[0:3:1]

colors[:3:]
'red'
  • colors[5:len(colors):2]

colors[5::2]
'bu,ylo'

보폭을 생략할 때는 둘째 콜론(:)도 함께 생략할 수 있다.

  • colors[0:3]

colors[:3]
'red'

슬라이싱 인덱스의 범위

문자열의 인덱스 범위를 벗어나는 값으로 슬라이싱을 실행해도 오류가 발생하지 않는다. 대신 문자열의 좌 또는 우 끝까지만 슬라이싱이 적용된다.

colors[-30:100]
'red, blue, yellow'
colors[5:100:3]
'beyl'

역순 슬라이싱

슬라이싱은 기본적으로 작은 인덱스에서 큰 인덱스 방향으로 확인한다. 하지만 보폭을 음의 정수로 지정하면 역순으로 항목을 추출한다. 역순으로 슬라이싱을 지정하려면 시작인덱스가 끝인덱스보다 커야 한다.

colors[-2:-8:-3]
'oe'

보폭이 -1이고, 시작 인덱스와 끝 인덱스를 생략하면 문자열 전체를 역순으로 추출한다.

colors[::-1]
'wolley ,eulb ,der'

4.9불변 자료형: 문자열

문자열은 불변immutable 자료형이다. 즉, 한 번 생성된 문자열은 수정할 수 없다. 따라서 인덱싱 또는 슬라이싱을 사용하여 값의 일부를 변경하려 시도하면 수정을 허용하지 않는 자료형을 수정하려 시도한다는 의미에서 TypeError가 발생한다.

예를 들어 아래 그림은 “Michael Jackson” 문자열에 포함된 항목을 인덱싱으로 수정할 수 없음을 보여준다. 심지어 대문자 'J’를 동일한 문자로 교체하는 것도 허용되지 않는다.

위 그림의 내용을 코드로 작성하면 다음과 같다.

Name = "Michael Jackson"
Name[8] = 'J'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[66], line 2
      1 Name = "Michael Jackson"
----> 2 Name[8] = 'J'

TypeError: 'str' object does not support item assignment

위 그림은 또한 기존의 문자열을 이용하여 새로운 문자열을 생성하는 일은 언제든지 가능함을 보여준다.

Name = Name + " is the best"
Name
'Michael Jackson is the best'

4.10문자열 메서드

문자열 자료형에만 사용하는 함수들이 있다. 이와같이 특정 자료형에만 사용하는 함수들을 메서드method라 부른다. 메서드는 일반적인 함수와는 달리 특정 자료형의 값을 먼저 언급하고 바로 이어서 점(.)과 함께 실행한다.

문자열 자료형은 다양한 메서드를 제공한다. 여기서는 아래 메서드의 기능만 살펴 본다.

Table 1:문자열 주요 메서드

기능

메서드

설명

탐색

count()

인자로 지정된 문자열이 사용된 빈도

find()

인자로 지정된 문자열이 시작하는 인덱스 반환. 지정된 문자열이 없다면 -1 반환

index()

인자로 지정된 문자열이 시작하는 인덱스 반환. 지정된 문자열이 없다면 오류 발생

startswith()

인자로 지정된 문자열로 시작하는지 여부 판단

endswith()

인자로 지정된 문자열로 끝나는지 여부 판단

소문자/대문자

lower()

기존 문자열과 동일하지만 모든 영어 알파벳이 소문자인 문자열 반환

upper()

기존 문자열과 동일하지만 모든 영어 알파벳이 대문자인 문자열 반환

교체/삭제

replace()

기존 문자열에서 첫째 인자로 지정된 문자열만 둘째 인자로 교체된 새로운 문자열 반환

strip()

기존 문자열의 양끝에서 인자로 지정된 문자열 안에 포함된 모든 문자가 최대한 많이 삭제된 문자열 반환.

쪼개기/결합

split()

기존 문자열을 쪼개서 인자로 지정된 문자열에 포함된 기호들을 기준으로 쪼개서 생성된 부분 문자열들로 구성된 리스트 반환.

join()

여러 개의 문자열을 인자로 지정된 기호로 연결해서 생성한 문자열 반환

4.10.1탐색 메서드

아래 문자열을 이용하여 먼저 탐색과 관련된 메서드의 기능을 살펴 본다.

words = " \tMy life is so so cool! \n"

count() 메서드

인자로 지정된 문자열이 몇 번 등장하는지를 확인한다. 예를 들어 'so' 문자열은 words에 두 번 등장한다.

words.count('so')
2

반면에 'soo' 문자열은 words 문자열에 등장하지 않는다.

words.count('soo')
0

find() 메서드

지정된 문자열이 처음 시작하는 곳의 인덱스를 확인한다. 예를들어, 'cool' 문자열은 words 문자열의 19 번 인덱스부터 시작한다.

words.find('cool')
19

등장하지 않으면 -1을 반환한다. 예를 들어 'col' 문자열은 words 문자열에 등장하지 않는다.

words.find('col')
-1

index() 메서드

지정된 문자열이 처음 시작하는 곳의 인덱스를 확인한다. 'cool' 문자열은 words 문자열의 19 번 인덱스부터 시작한다.

words.index('cool')
19

등장하지 않으면 오류가 발생한다. 예를 들어 'col' 문자열은 words 문자열에 등장하지 않는다.

words.index('col')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[74], line 1
----> 1 words.index('col')

ValueError: substring not found

startswith() 메서드

지정된 문자열로 시작하는지 여부를 판정한다. 예를 들어 words 문자열은 ' \tMy' 문자열로 시작한다.

words.startswith(' \tMy')
True

반면에 'My' 문자열로 시작하진 않는다.

words.startswith('My')
False

endswith() 메서드

지정된 문자열로 끝나는지 여부를 판정한다. 예를 들어 words 문자열은 'cool!' 문자열로 끝나지 않는다.

words.endswith('cool!')
False

대신 'cool! \n' 문자열로 끝난다.

words.endswith('cool! \n')
True

4.10.2새로운 문자열 생성 메서드

지금부터 언급되는 메서드는 word 문자열 자체는 그대로 두고 새로운 문자열을 생성한다.

words = " \tMy life is \tso so cool! \n"

lower() 메서드

모든 영어 알파벳을 소문자로 변경한 문자열을 반환한다. 예를 들어 아래 코드는 word 문자열에 포함된 모든 문자열을 소문자로 변경한 문자열을 생성한다.

words.lower()
' \tmy life is \tso so cool! \n'

upper() 메서드

모든 영어 알파벳을 대문자로 변경한 문자열을 반환한다. 예를 들어 아래 코드는 word 문자열에 포함된 모든 문자열을 대문자로 변경한 문자열을 생성한다.

words.upper()
' \tMY LIFE IS \tSO SO COOL! \n'

replace() 메서드

지정된 부분 문자열이 지정된 다른 문자열로 교체된 문자열을 반환한다. 예를 들어 아래 코드는 word 문자열에 포함된 so 문자열을 모두 that 으로 변경한 문자열을 생성한다.

words.replace('so', 'that')
' \tMy life is \tthat that cool! \n'

strip() 메서드

인자를 지정하지 않으면 문자열 양끝에 위치한 모든 화이트 스페이스를 삭제한 문자열을 반환한다. 양끝이 아닌 경우의 화이트 스페이스는 그대로 둔다.

words_stripped = words.strip()
words_stripped
'My life is \tso so cool!'

인자 문자열을 지정하면 인자에 포함된 모든 기호를 문자열 양끝에서 최대한 많이 삭제한 문자열을 반환한다. 아래 코드는 양끝에서 공백 ' ', 탭 '\t', 줄바꿈 '\n', 느낌표 '!', 소문자 와이 'y', 대문자 엠 'M'을 최대한 많이 삭제한다. 이 경우에도 지정된 문자열이 아닌 다른 문자열로 감싸인 다른 문자는 그대로 남는다.

words.strip(' \t\n!yM')
'life is \tso so cool'

split() 메서드

인자를 지정하지 않으면 공백 기준으로 쪼갠 문자열들로 구성된 리스트를 반환한다. 이 과정에서 쪼개진 문자열 양끝에 있는 화이트 스페이스는 모두 제거된다.

words.split()
['My', 'life', 'is', 'so', 'so', 'cool!']

문자열을 인자로 지정하면 해당 문자열을 기준으로 쪼개진 단어들의 리스트를 생성한다. 예를 들어 아래 문자열은 단어들 사이에 하이픈 "-"이 위치한다.

hyphen_words = 'My-life-is-so-so-cool!'

위 문자열을 "-"을 기준으로 쪼개면 다음과 같다.

hyphen_words.split("-")
['My', 'life', 'is', 'so', 'so', 'cool!']

join() 메서드

여러 개의 문자열을 결합한다. join() 메서드를 실행하는 문자열은 지정된 항목들을 이어붙이는 연결고리 역할을 수행한다.

예를 들어 아래 코드는 hello 문자열에 포함된 모든 문자열들 사이에 별표 기호를 추가하여 새로운 문자열을 생성한다.

'*'.join('hello')
'h*e*l*l*o'

문자열로 구성된 리스트가 인자로 사용되면 항목으로 포함된 모든 문자열을 결합한다. 예를 들어 아래 코드는 하이픈을 공백으로 대체하여 정상적인 문자열을 생성한다.

words_splitted = hyphen_words.split("-")
words_splitted
['My', 'life', 'is', 'so', 'so', 'cool!']
' '.join(words_splitted)
'My life is so so cool!'

4.11메서드 연속 적용

새로운 문자열을 생성하는 메서드에 다른 문자열 메서드를 연속해서 적용하면 매우 효율적으로 원하는 문자열을 생성할 수 있다. 예를 들어, 아래 코드는 문자열 양끝에서 화이트 스페이스를 제거하면 'My'로 시작함을 확인해준다.

words.strip().startswith('My')
True
words.strip()
'My life is \tso so cool!'

위 방식이 허용되는 이유는 메서드를 실행하는 표현식과 메서드의 반환값을 동일시되기 때문이다. 즉, words.strip()와 문자열 My life is \tso so cool!이 동일시되며, 따라서 startswith() 메서드 등 다른 문자열 메서드를 연속해서 적용할 수 있다.

반면에 아래 코드는 먼저 소문자로 변경한 다음에 화이트 스페이스 기준으로 쪼갠다.

words.lower().split()
['my', 'life', 'is', 'so', 'so', 'cool!']

join() 메서드를 연속 적용하는 방법은 다음과 같다. 아래 코드는 하이픈 기호를 기준으로 쪼갠 다음에 공백으로 쪼개진 단어를 이용하여 연결한다. 그 결과 문자열에 포함된 하이픈 기호가 제거된 문자열이 생성된다.

' '.join(hyphen_words.split("-"))
'My life is so so cool!'