- 프롤로그
- 개발 첫걸음
- 파이썬 기초
- 파이썬 중급
- 파이썬 고급
- 내장 함수 톺아보기
- 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
- 변수의 범위 – 이름 검색의 범위
- 파이썬 심화
- 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
- 데코레이터 – 함수의 기능을 강화하기
- 프로퍼티
- 제너레이터
- async와 await
- 객체로서의 클래스 – 클래스를 동적으로 정의하기
- 파이썬 프로젝트 실습
- 원카드 게임 만들기 (1)
- 원카드 게임 만들기 (2)
- 원카드 게임 만들기 (3) (작성중)
- 턴제 자동 전투 게임 만들기 (작성중)
- 실전 (파이썬 외적인 것들)
- 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
- 유니코드 – 컴퓨터에서 문자를 표기하는 방법
- html, css, 인터넷 – 자동화 첫 걸음 내딛기
- 네트워크 – 인터넷으로 통신하는 방법
- 문서 – 문맥을 읽어보기
이번 시간에는 문자열인 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 + b
나 round(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) |
문자열 내 모든 a 를 b 로 치환합니다. 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
의 부분 문자열을 가져오는 슬라이싱은 차후 시간에 설명합니다. (추가 예정)
위에서 설명했던 메소드들은 자주 쓰는, 혹은 초보자들이 쓰기에 알맞은 메소드를 추린 것입니다. 더 자세하게 알고 싶다면 아래 링크를 참조해주세요.
- 프롤로그
- 개발 첫걸음
- 파이썬 기초
- 파이썬 중급
- 파이썬 고급
- 내장 함수 톺아보기
- 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
- 변수의 범위 – 이름 검색의 범위
- 파이썬 심화
- 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
- 데코레이터 – 함수의 기능을 강화하기
- 프로퍼티
- 제너레이터
- async와 await
- 객체로서의 클래스 – 클래스를 동적으로 정의하기
- 파이썬 프로젝트 실습
- 원카드 게임 만들기 (1)
- 원카드 게임 만들기 (2)
- 원카드 게임 만들기 (3) (작성중)
- 턴제 자동 전투 게임 만들기 (작성중)
- 실전 (파이썬 외적인 것들)
- 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
- 유니코드 – 컴퓨터에서 문자를 표기하는 방법
- html, css, 인터넷 – 자동화 첫 걸음 내딛기
- 네트워크 – 인터넷으로 통신하는 방법
- 문서 – 문맥을 읽어보기
One thought on “파이썬 강좌 – 문자열 ~ 텍스트 다루기”