🔥알림🔥
① 테디노트 유튜브 -
구경하러 가기!
② LangChain 한국어 튜토리얼
바로가기 👀
③ 랭체인 노트 무료 전자책(wikidocs)
바로가기 🙌
④ RAG 비법노트 LangChain 강의오픈
바로가기 🙌
⑤ 서울대 PyTorch 딥러닝 강의
바로가기 🙌
#04-파이썬(Python) 문자열(str)
본 포스팅은 파이썬(Python) 코딩 입문자를 위한 튜토리얼 시리즈 연재 중 일부입니다. 파이썬에 대한 기본 지식을 다룹니다.
코드
문자열
데이터 분석에 있어서 문자열(텍스트) 데이터의 중요성
- 자연어처리 데이터는 대부분이 텍스트 데이터로 이루어져 있습니다.
- 우리가 흔히 접하는 Excel 혹은 Table 데이터안에도 수많은 텍스트 데이터가 존재합니다.
- 게다가 우리나라는 영어와 더불어 한글까지 추가로 처리 할 수 있어야 합니다!!
특성
- 문자열 역시 리스트(list), 튜플(tuple)과 마찬가지로 sequence 형 자료구조를 가집니다.
- 문자열은 불변(immutable) 객체입니다.
문자열의 생성
파이썬의 문자열은 작은 따옴표(') 나 큰 따옴표(") 모두 구분없이 사용하여 문자열을 생성할 수 있습니다.
작은 따옴표(') 사용
'안녕하세요? 반갑습니다.'
'안녕하세요? 반갑습니다.'
큰 따옴표(") 사용
"안녕하세요? 반갑습니다."
'안녕하세요? 반갑습니다.'
작은 따옴표 3개 혹은 큰 따옴표 3개를 써서 여러 줄의 문자열을 생성할 수 있습니다.
sample = '''안녕하세요?
반가워요
내이름은
파이썬 입니다.'''
print(sample)
안녕하세요? 반가워요 내이름은 파이썬 입니다.
sample = """안녕하세요?
반가워요
내이름은
파이썬 입니다.
웰컴!
"""
print(sample)
안녕하세요? 반가워요 내이름은 파이썬 입니다. 웰컴!
문자열 출력 (포맷팅)
print() : 출력
print('헬로우 파이썬')
헬로우 파이썬
print('문자열 첫째', '그리고, 둘째')
문자열 첫째 그리고, 둘째
end
옵션으로 출력될 마지막 글자를 변경할 수 있습니다. (기본값: \n)
- [참고] : \n 은 개행을 의미하는 특수 문자입니다.
print('여기까지!', end='end출력!')
여기까지!end출력!
sep
옵션으로 출력될 문자열 사이에 출력될 글자를 변경할 수 있습니다. (기본값: 공백)
print('문자1', '문자1', '문자3', sep=' <구분> ')
문자1 <구분> 문자1 <구분> 문자3
%를 사용한 출력
"안녕하세요? %s" % ('반갑습니다.')
'안녕하세요? 반갑습니다.'
'안녕하세요? %.3f' % (0.123456)
'안녕하세요? 0.123'
'안녕하세요? %d' % (12345)
'안녕하세요? 12345'
'안녕하세요? %c' % ('a')
'안녕하세요? a'
{} 와 format를 사용한 출력
'웰컴투? {}'.format('파이썬.')
'웰컴투? 파이썬.'
'비밀번호 {}'.format(486)
'비밀번호 486'
소수점 2자리 까지 제한하는 경우 (그 이하자리는 반올림)
'원주율? {:.2f}'.format(3.141592)
'원주율? 3.14'
f 문자열 포맷팅 (python 3.6 이상만 지원)
name = '펭수'
age = 10
print(f'나의 이름은 {name}입니다. 나이는 {age} 살입니다.')
나의 이름은 펭수입니다. 나이는 10 살입니다.
print(f'내년에 저는 {age+1} 살입니다.')
내년에 저는 11 살입니다.
d = {'name':'펭수', 'age':10}
print(f"반가워요. 저는 {d['name']}입니다. 저의 나이는 {d['age']} 살입니다.")
반가워요. 저는 펭수입니다. 저의 나이는 10 살입니다.
문자열 길이
영문 (alphabet)
len('banana')
6
공백은 길이에 포함됩니다.
len('banana pen')
10
한글
len('한글')
2
공백은 길이에 포함됩니다.
len('한글 킹왕짱')
6
인덱싱 (indexing)
- 문자열에서 한 개의 글자(char)를 조회하기 위해서는 []를 활용한 인덱싱으로 조회할 수 있습니다.
a = 'Python is my life'
a
'Python is my life'
P | y | t | h | o | n | i | s | m | y | l | i | f | e | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
-17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
a[0]
'P'
a[-2]
'f'
슬라이싱 (Slicing)
- 슬라이싱의 활용: [start:stop:step] 을 명시하여 부분을 추출할 수 있습니다.
a = 'Python is my life'
a
'Python is my life'
P | y | t | h | o | n | i | s | m | y | l | i | f | e | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
-17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
[:]을 활용하여 전체를 추출할 수 있습니다.
a[:]
'Python is my life'
P | y | t | h | o | n | i | s | m | y | l | i | f | e | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
-17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
[start:]는 시작 index 부터 끝까지 추출합니다.
a[3:]
'hon is my life'
a[-4:]
'life'
P | y | t | h | o | n | i | s | m | y | l | i | f | e | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
-17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
[:end]는 처음부터 end 전까지 추출합니다.
a[:6]
'Python'
a[:-3]
'Python is my l'
P | y | t | h | o | n | i | s | m | y | l | i | f | e | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
-17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
[start:end]는 start부터 end 전까지 추출합니다.
a[3:6]
'hon'
[start:stop:step]에서 step 지정시 step만큼 건너 뛰면서 추출합니다.
a[::2]
'Pto sm ie'
역순으로 출력하기 위해서는 step을 -1로 지정합니다.
a[::-1]
'efil ym si nohtyP'
불변(immutable)
- 문자열은 index를 통해 값을 수정 및 변경이 불가합니다.
- 하지만 메서드(method)로 변경할 수 있습니다.
a = 'Python is my life'
index에 값을 할당하여 변경하려는 경우
a[2] = 'Y'
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-37-f2db0e8f1888> in <module> ----> 1 a[2] = 'Y' TypeError: 'str' object does not support item assignment
del로 부분 삭제하려는 경우
del a[2]
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-38-734682c6a06c> in <module> ----> 1 del a[2] TypeError: 'str' object doesn't support item deletion
문자열의 덧셈과 곱셈
연결: 문자열의 덧셈
덧셈은 문자열을 연결합니다.
a = '반갑습니다!'
b = '웰컴 투 파이썬'
a + b
'반갑습니다!웰컴 투 파이썬'
a + '???'
'반갑습니다!???'
'hello' + ', world'
'hello, world'
복제: 문자열의 곱셈
문자열을 곱한 숫자 만큼 반복하여 생성합니다.
a * 2
'반갑습니다!반갑습니다!'
print('abc ' * 5)
print('===' * 7)
abc abc abc abc abc =====================
문자열의 list, set
리스트(list)
- 문자열을 리스트(list)로 타입 변환이 가능합니다.
- 타입 변환시 한 글자를 요소로 갖는 리스트가 생성됩니다.
list('ABCDE')
['A', 'B', 'C', 'D', 'E']
세트(set)
- 한 글자를 요소로 갖는 세트가 생성됩니다.
- 세트의 특성상 요소를 생성한 후 중복된 글자는 제거됩니다.
set('AAABBBCCC')
{'A', 'B', 'C'}
중복이 제거된 리스트로 생성하기 위해서는 list로 다시 타입 변환합니다.
list(set('AAABBBCCC'))
['A', 'B', 'C']
문자열(텍스트)을 다루는 다양한 기능, 메서드(method)
문자열만 가지고 있는 고유의 편한 기능들이 있습니다.
우리는 이들 중 몇 가지를 배워 앞으로 유용하게 활용할 예정입니다.
split() : 분리
- split은 문장을 특정 규칙에 의해 쪼개 주는 기능을 합니다.
- 분리한 결과는 list 형식으로 값을 return 받습니다.
a = 'This is a pen'
기본 값으로 공백이 지정되어 있습니다. 즉, 공백을 기준으로 분리하여 리스트로 반환합니다.
a.split()
['This', 'is', 'a', 'pen']
기본 값인 공백에서 특정 문자로 지정할 수 있습니다.
a = 'This-is-a-pen'
a.split('-')
['This', 'is', 'a', 'pen']
aa = a.split('-')
aa
['This', 'is', 'a', 'pen']
aa
에 반환된 리스트를 대입 후 index로 값을 조회할 수 있습니다.
aa[0]
'This'
aa[2]
'a'
aa[0] + aa[2]
'Thisa'
한글도 동일하게 적용됩니다.
a = '한글은 어떻게 될까요?'
a.split()
['한글은', '어떻게', '될까요?']
join() : 합치기
- 결합하고자 하는 문자에 .join() 안에 리스트를 지정하여 결합할 수 있습니다.
'-'.join(['010', '1234', '5678'])
'010-1234-5678'
'-'.join('ABCDE')
'A-B-C-D-E'
lower(), upper() : 소문자 / 대문자로 만들기
a = 'My name is Teddy'
소문자로 변경
a.lower()
'my name is teddy'
대문자로 변경
a.upper()
'MY NAME IS TEDDY'
한글에는 대소문자 구분이 없습니다.
a = '한글엔 대소문자가 없어요ㅠ'
a.lower()
'한글엔 대소문자가 없어요ㅠ'
a.upper()
'한글엔 대소문자가 없어요ㅠ'
startswith, endswith
시작과, 끝이 맞는지 결과를 bool로 반환합니다.
a = '01-sample.png'
startswith() : 시작하는
- 지정한 문자열로 시작하면 True, 그렇지 않다면 False를 반환합니다.
a.startswith('01')
True
a.startswith('02')
False
endswith() : 끝나는
- 지정한 문자열로 끝나면 True, 그렇지 않다면 False를 반환합니다.
a.endswith('.png')
True
a.endswith('.jpg')
False
replace() : 문자열 바꾸기
- 문자열에 replace(바꿀 대상, 바꾸려는 문자열) 지정하여 문자열을 변경합니다.
- 결과는 복사본이 만들어져 반환됩니다.
a = '01-sample.png'
a.replace('.png', '.jpg')
'01-sample.jpg'
반환값은 복사본이며 원본에 변경사항이 바로 적용되지 않습니다.
a
'01-sample.png'
new_a = a.replace('.png', '.jpg')
print(new_a)
01-sample.jpg
불필요한 공백 제거
a = ' 01-sample.png '
print(a)
01-sample.png
strip은 불필요한 공백을 제거해 줍니다.
lstrip() : 왼쪽 공백 제거
a.lstrip()
'01-sample.png '
rstrip() : 오른쪽 공백 제거
a.rstrip()
' 01-sample.png'
strip() : 양쪽 공백 제거
a.strip()
'01-sample.png'
댓글남기기