파이썬 강좌 – 문자열 ~ 텍스트 다루기

  1. 프롤로그
  2. 개발 첫걸음
    1. 컴퓨터 구성요소 – 컴퓨터는 어떤 걸 할 수 있나?
    2. 개발과 관련된 용어
    3. 파이썬의 선택 – 왜 파이썬인가?
    4. 파이썬 설치 – Hello World 출력하기
    5. Visual Studio Code 의 편리한 기능
    6. REPL과 콘솔 창 – 파이썬 동작시키기
  3. 파이썬 기초
    1. 기초 입출력 – 소통하기
    2. 변수와 대입 – 기억하기
    3. 연산자 – 계산하기
    4. 조건문 – 분기를 만들기
    5. 반복문 – 비슷한 작업을 반복하기
    6. 반복문 코딩하기
    7. 변수와 리스트 – 비슷한 변수들을 묶기
    8. for, range – 리스트의 항목을 다루기
    9. 함수와 메소드의 호출 – 편리한 기능 이용하기
    10. 모듈 설치와 사용 – 유용한 기능 끌어다 쓰기
    11. 문자열 – 텍스트 다루기
  4. 파이썬 중급
    1. 함수를 직접 만들기 – 자주 쓰는 기능을 묶기
    2. 딕셔너리, 튜플, 세트 – 변수를 다양한 방법으로 묶기
    3. 클래스와 객체 – 변수를 사람으로 진화시키기
    1. 상속 – 클래스를 확장하기
    2. 정체성과 동질성 – 객체의 성질
    3. 특별 메소드와 연산자 – 파이썬의 내부 작동방식 이해하기
    4. 다양한 함수 인수 – 유연한 함수 만들기
    5. 슬라이싱 – 리스트 간편하게 접근하기
    6. 지능형 리스트(List Comprehension) – 리스트 갖고 놀기
    7. namedtuple - 데이터 묶음 손쉽게 만들기
    8. 조건 표현식 (Conditional Expression) - 간단한 분기 나타내기
    9. 코드 스타일 - 코드의 일관성 유지하기
    10. 명령문, 표현식 – 문법을 이루는 것들
    11. 본격적인 검색 해보기
  5. 파이썬 고급
    1. 일급 함수 다루기
    2. NotImplementedError와 NotImplemented
    3. 어노테이션 – 수월하게 프로그래밍하기
    1. 내장 함수 톺아보기
    2. 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
    3. 변수의 범위 – 이름 검색의 범위
  6. 파이썬 심화
    1. 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
    2. 데코레이터 – 함수의 기능을 강화하기
    3. 프로퍼티
    4. 제너레이터
    5. async와 await
    6. 객체로서의 클래스 – 클래스를 동적으로 정의하기
  7. 파이썬 프로젝트 실습
    1. 원카드 게임 만들기 (1)
    2. 원카드 게임 만들기 (2)
    3. 원카드 게임 만들기 (3) (작성중)
    4. 턴제 자동 전투 게임 만들기 (작성중)
  8. 실전 (파이썬 외적인 것들)
    1. 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
    2. 유니코드 – 컴퓨터에서 문자를 표기하는 방법
    3. html, css, 인터넷 – 자동화 첫 걸음 내딛기
    4. 네트워크 – 인터넷으로 통신하는 방법
    5. 문서 – 문맥을 읽어보기

이번 시간에는 문자열인 str 변수를 좀 더 편하게 사용해보겠습니다~


문자열 안에 특수 문자열 넣기

문자열은 크게 두 가지 표기법이 있습니다. 바로 '텍스트', "텍스트"와 같이 텍스트를 따옴표(') 혹은 쌍따옴표(")로 감싸주면 됩니다. 하지만 만약에 파이썬 문법의 일부나 따옴표 혹은 쌍따옴표 그 자체를 문자로 사용하고 싶다면 어떻게 될까요? 다음 예제를 봅시다.

print("문자열 내에서 if와 같은 키워드는 무시됩니다.")
print("여기는 따옴표'가 들어갈 수 있습니다.")
print('여기는 쌍따옴표 "가 들어갈 수 있습니다.')
print("여기서 쌍따옴표는 \"라고 써주면 됩니다.")
문자열 내에서 if와 같은 키워드는 무시됩니다.
여기는 따옴표''가 들어갈 수 있습니다.
여기는 쌍따옴표 "가 들어갈 수 있습니다.
여기서 쌍따옴표는 "라고 써주면 됩니다.

역슬래시(\) 문자를 통해서 우리는 쌍따옴표 안에 쌍따옴표를 넣을 수 있습니다. 역슬래시의 기능은 바로 뒤에 나오는 문자를 특수하게 처리하라는 뜻입니다. 즉 \"는 문자열을 닫는 문법적 역할 " 이 아닌 문자열 그 자체 "로 쓰겠다는 뜻입니다. 슬래시(/)가 아님을 주의해주세요. 백스페이스 근처에 있는 역슬래시입니다. 역슬래시는 폰트에 따라서 원화()로 표기되기도 하니 다르게 나온다고 해서 당황하시지 않아도 됩니다.


문자열과 for

for 안에 문자열을 넣을 수 있습니다. 이 때, 순회하는 변수는 문자열의 각 글자를 가리키게 됩니다.

for s in "안녕하세요":
    print(s)
안
녕
하
세
요

여러 줄에 걸친 문자열 (긴 주석)

파이썬에서는 여러 줄에 걸친 긴 문자열을 쓸 수 있습니다. 긴 문자열을 쓸 때에는 '''"""로 여러 줄에 걸친 문자열을 감싸주면 됩니다. 그 사이에 있는 모든 문자가 문자열이 되며, 줄바꿈 문자도 포함됩니다. 이는 아래 예시를 통해 확인하실 수 있습니다.

text = '''
abcd
efgh
ijkl
'''
print(text)

abcd
efgh
ijkl

긴 주석을 문법적으로 지원하지는 않지만 이 긴 문자열을 어느 변수에도 대입하지 않는 방식으로 긴 주석처럼 활용할 수 있습니다. 실제로 파이썬에서는 이런 식으로 작성된 문자열을 문서로 취급하여 텍스트 에디터에서 도움말을 불러올 때 등에 자동으로 연동될 수 있도록 합니다.

'''
이 프로그램은 OOO입니다.
어쩌구..저쩌구..
제작자 : something@naver.com
'''

f-string

정식 명칭은 포맷 문자열 리터럴이며, 포맷을 지정하기 편리한 문자열 작성법입니다. 작성법은 일반 문자열과 거의 비슷하나, 따옴표 혹은 따옴표로 시작하기 직전에 f를 붙이는 것이 다릅니다. f-string 내부에는 중괄호({})와 함께 변수나 값을 씁니다. 예제를 함께 보십시다. 중괄호 내에는 값이 계산될 수 있으므로 a + bround(a)와 같이 식으로 작성할 수도 있습니다.

number = 10
print("숫자는 " + str(number) + "입니다.")
print(f"숫자는 {number}입니다.") 
숫자는 10입니다.
숫자는 10입니다.

기존에는 우리가 문자열 사이에 변수를 집어넣으려면 + 연산자와 str 내장 함수를 활용했어야 했습니다. 하지만 f-string을 이용하면 아주 쉽게 변수의 값을 끌어다 쓸 수 있다는 것을 확인하실 수 있습니다.


f-string에는 한층 더 편리한 기능이 있는데요, {} 내부에 있는 실제 코드와 함께 출력하고 싶다면 }로 닫기 전에 =를 넣으면 됩니다. 여기서의 등호는 대입문의 등호와 전혀 연관이 없습니다! 단지 f-string의 부가적인 사용법이라고 생각해주세요. 역시 예제를 확인합시다. 아래 3개의 print 문은 똑같은 결과를 출력합니다.

num = 14.73
print("round 예제 >> round(num) = " + str(round(num)))
print(f"round 예제 >> round(num) = {round(num)}")
print(f"round 예제 >> {round(num) = }")
round 예제 >> round(num) = 15
round 예제 >> round(num) = 15
round 예제 >> round(num) = 15

이제부터 각종 에제에는 f-string을 적극적으로 사용할 예정이니 갑자기 이상한 문법이 나왔다고 해서 당황해주시지 말아 주세요~


편리한 메소드

파이썬 자체적으로 제공하는 편리한 str 메소드가 많습니다. 메소드를 호출하는 방법은 크게 두 가지가 있습니다.

  • 따옴표 혹은 쌍따옴표 뒤에 바로 호출하기
"1324132121".count("1")
  • 변수에 값을 넣어서 호출하기
tem = "{}야, 잘 잤니?"
result = tem.format("철수")

이제 주로 사용되는 메소드나 기능을 알아보도록 합시다.


포매팅

  • 사용법 : str.format(t1, t2, ...)

  • 설명 : 해당 문자열의 포함된 필드를 차례로 치환합니다. 필드는 {}로 만들 수 있습니다. 일종의 템플릿을 만들어놓고 재사용하고자 할 때 유용합니다.

  • 예제

template = "학생의 이름은 {}이고 점수는 {}입니다"
print(template.format("태훈", 98))
print(template.format("팽수", 50))
학생의 이름은 태훈이고 점수는 98입니다
학생의 이름은 팽수이고 점수는 50입니다

위 예제의 template 변수에서 {}는 총 2개가 등장합니다. 그에 따라 format 메소드를 호출할 때 2개의 인수를 받는다는 걸 확인할 수 있습니다. ({}가 더 많이 등장한다면 인수도 더 많이 받을 것입니다.) "태훈"은 앞쪽의 {}에 대응되고 98은 뒤쪽의 {}에 대응됩니다.

일단 format 메소드에 대한 가장 기본적인 사용법에 대해 알려드렸으나, 실은 이 메소드의 사용법은 굉장히 방대하므로 공식 문서 혹은 다른 리소스도 찾아보시면 좋겠습니다.


검사 및 체크

사용법 설명
a in text in 연산자는 리스트와 마찬가지로 내부에 문자열이 포함되어 있는지 여부에 대해 검사합니다.
text.startswith(a) text의 시작 부분이 a로 시작하는지에 대한 여부를 검사합니다.
text.endswith(a) text의 끝 부분이 a로 끝나는지에 대한 여부를 검사합니다.
text.isdigit() text가 숫자로 이루어진 수인지를 판단합니다.
  • 예제
text = "Do you wanna build a snowman?"
print(f"{text=}")
print(f"{'build' in text=}")
print(f"{'knock' in text=}")
print(f"{text.startswith('Do')=}")
print(f"{text.startswith('you')=}")
print(f"{text.endswith('?')=}")
print(f"{text.endswith('!')=}")
print(f"{'42'.isdigit()=}")
print(f"{text.isdigit()=}")
text='Do you wanna build a snowman?'
'build' in text=True
'knock' in text=False
text.startswith('Do')=True
text.startswith('you')=False
text.endswith('?')=True
text.endswith('!')=False
'42'.isdigit()=True
text.isdigit()=False

접근 및 탐색

다음 메소드들은 문자열 내 포함된 문자열에 대해 접근하거나 탐색합니다. 어떤 문자열이 포함되어 있는지 여부만 검사한다면 in 연산자를 사용하는 게 더 편리합니다.

사용법 설명
text[i] 문자열에서 인덱스 i에 있는 문자 하나에 접근합니다. 리스트와 마찬가지로 첫 번째 글자는 text[0] 입니다.
text.count(a) 문자열에서 a가 등장하는 횟수를 반환합니다.
text.find(a) 문자열에서 a가 등장하는 곳의 인덱스를 반환합니다. a가 여러 번 등장한다면 가장 첫 번째의 인덱스를 반환합니다. a가 없으면 -1을 반환합니다.
text.index(a) find와 유사하지만 찾을 수 없는 경우에는 에러를 일으킵니다.
  • 예시
text = "Do you wanna build a snowman?"
print(f"{text=}")
print(f"{text[3]=}")
print(f"{text.count('a')=}")
print(f"{text.count('nothing')=}")
print(f"{text.find('build')=}")
print(f"{text.find('nothing')=}")
print(f"{text.index('wanna')=}")
print(f"{text.index('nothing')=}")
text='Do you wanna build a snowman?'
text[3]='y'
text.count('a')=4
text.count('nothing')=0
text.find('build')=13
text.find('nothing')=-1
text.index('wanna')=7
Traceback (most recent call last):
  File "c:/Users/tooth/Desktop/test.py", line 9, in <module>
    print(f"{text.index('nothing')=}")
ValueError: substring not found

조작

다음 메소드들은 텍스트를 수정하거나 조작하는 데 좋습니다. 다만 모든 메소드는 수정된 텍스트가 새로 생성되어 반환되는 식으로 작동합니다. 단순히 메소드 호출만 하여서는 변경사항이 적용되지 않으므로 대입문을 별도로 써주어야 합니다.

사용법 설명
text.partition(a) 문자열에서 a를 찾습니다. 처음 발견되는 a를 기준으로 왼쪽, a 그 자체, a를 기준으로 오른쪽, 이렇게 세 부분으로 나누어 튜플로 반환합니다. (튜플이란 일단 고정된 리스트라고 생각해주세요. 자세한 내용은 튜플(추가 예정)에서 알아봅시다.)
text.split(a) 또는 text.split(a, b) 문자열에서 a를 구분자로 정하여, 문자열에 있는 단어들의 리스트를 반환합니다. b가 주어지면 최대 b 번의 분할이 수행됩니다.
text.replace(a, b) 또는 text.replace(a, b, c) 문자열 내 모든 ab로 치환합니다. c가 주어질 경우 최대 c 번의 치환이 수행됩니다.
text.strip() 또는 text.strip(a) 문자열 앞 뒤의 공백을 제거합니다. a가 주어질 경우 a에 포함되는 모든 문자에 대해서 text 앞 뒤의 문자들을 제거합니다.
text.join(l) l은 리스트입니다. text를 구분자로 이용하여 l의 모든 요소를 합쳐서 하나의 문자열을 반환합니다. "".join(l)은 구분자 없이 l의 모든 요소를 합칩니다.
  • 예제
text = "Do you wanna build a snowman?"
print(f"{text.partition('wanna')=}")
print(f"{text.partition('nothing')=}")
print(f"{text.split(' ')=}")
print(f"{text.split('nothing')=}")
print(f"{text.replace('build', 'throw')=}")
print(f"{text.replace('nothing', 'done')=}")
print(f"{'  하이    '.strip()=}")
print(f"{text.strip('Do?anmw')=}")
print(f"text는 수정되지 않았습니다. >> {text}")

l = ['1','하이','파워','국어']
print(f"{l=}")
print(f"{''.join(l)=}")
print(f"{', '.join(l)=}")
text.partition('wanna')=('Do you ', 'wanna', ' build a snowman?')
text.partition('nothing')=('Do you wanna build a snowman?', '', '')
text.split(' ')=['Do', 'you', 'wanna', 'build', 'a', 'snowman?']
text.split('nothing')=['Do you wanna build a snowman?']
text.replace('build', 'throw')='Do you wanna throw a snowman?'
text.replace('nothing', 'done')='Do you wanna build a snowman?'
'  하이    '.strip()='하이'
text.strip('Do?anmw')=' you wanna build a s'
text는 수정되지 않았습니다. >> Do you wanna build a snowman?
l=['1', '하이', '파워', '국어']
''.join(l)='1하이파워국어'
', '.join(l)='1, 하이, 파워, 국어'

인덱스 기반으로 text의 부분 문자열을 가져오는 슬라이싱은 차후 시간에 설명합니다. (추가 예정)


위에서 설명했던 메소드들은 자주 쓰는, 혹은 초보자들이 쓰기에 알맞은 메소드를 추린 것입니다. 더 자세하게 알고 싶다면 아래 링크를 참조해주세요.

  1. 프롤로그
  2. 개발 첫걸음
    1. 컴퓨터 구성요소 – 컴퓨터는 어떤 걸 할 수 있나?
    2. 개발과 관련된 용어
    3. 파이썬의 선택 – 왜 파이썬인가?
    4. 파이썬 설치 – Hello World 출력하기
    5. Visual Studio Code 의 편리한 기능
    6. REPL과 콘솔 창 – 파이썬 동작시키기
  3. 파이썬 기초
    1. 기초 입출력 – 소통하기
    2. 변수와 대입 – 기억하기
    3. 연산자 – 계산하기
    4. 조건문 – 분기를 만들기
    5. 반복문 – 비슷한 작업을 반복하기
    6. 반복문 코딩하기
    7. 변수와 리스트 – 비슷한 변수들을 묶기
    8. for, range – 리스트의 항목을 다루기
    9. 함수와 메소드의 호출 – 편리한 기능 이용하기
    10. 모듈 설치와 사용 – 유용한 기능 끌어다 쓰기
    11. 문자열 – 텍스트 다루기
  4. 파이썬 중급
    1. 함수를 직접 만들기 – 자주 쓰는 기능을 묶기
    2. 딕셔너리, 튜플, 세트 – 변수를 다양한 방법으로 묶기
    3. 클래스와 객체 – 변수를 사람으로 진화시키기
    1. 상속 – 클래스를 확장하기
    2. 정체성과 동질성 – 객체의 성질
    3. 특별 메소드와 연산자 – 파이썬의 내부 작동방식 이해하기
    4. 다양한 함수 인수 – 유연한 함수 만들기
    5. 슬라이싱 – 리스트 간편하게 접근하기
    6. 지능형 리스트(List Comprehension) – 리스트 갖고 놀기
    7. namedtuple - 데이터 묶음 손쉽게 만들기
    8. 조건 표현식 (Conditional Expression) - 간단한 분기 나타내기
    9. 코드 스타일 - 코드의 일관성 유지하기
    10. 명령문, 표현식 – 문법을 이루는 것들
    11. 본격적인 검색 해보기
  5. 파이썬 고급
    1. 일급 함수 다루기
    2. NotImplementedError와 NotImplemented
    3. 어노테이션 – 수월하게 프로그래밍하기
    1. 내장 함수 톺아보기
    2. 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
    3. 변수의 범위 – 이름 검색의 범위
  6. 파이썬 심화
    1. 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
    2. 데코레이터 – 함수의 기능을 강화하기
    3. 프로퍼티
    4. 제너레이터
    5. async와 await
    6. 객체로서의 클래스 – 클래스를 동적으로 정의하기
  7. 파이썬 프로젝트 실습
    1. 원카드 게임 만들기 (1)
    2. 원카드 게임 만들기 (2)
    3. 원카드 게임 만들기 (3) (작성중)
    4. 턴제 자동 전투 게임 만들기 (작성중)
  8. 실전 (파이썬 외적인 것들)
    1. 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
    2. 유니코드 – 컴퓨터에서 문자를 표기하는 방법
    3. html, css, 인터넷 – 자동화 첫 걸음 내딛기
    4. 네트워크 – 인터넷으로 통신하는 방법
    5. 문서 – 문맥을 읽어보기

One thought on “파이썬 강좌 – 문자열 ~ 텍스트 다루기

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다

Scroll to top