본문 바로가기
개발 이야기/Python

Python - 04. 문자열 자료형

by Crazy Lazy 2021. 7. 16.

1. 문자열 정의 및 특징

- 기본적으로 ' '," " 로 감싸서 사용.

- 긴 문자열 \ 사용하여 여러줄 입력 가능.

- 입력 모습 그대로 저장하기 위해 ''' ''', """ """ 를 감싸서 사용.

- 순서 존재하므로 인덱스, 슬라이싱 사용 가능.

- 변경이 불가능(immutable)해서 인덱스로 한 단어 수정 불가.

- 문자열의 길이는 len() 함수 확인 가능.

- 문자열은 더하기(+), 곱하기(*) 가능.

# 문자열 표현 : 작은따옴표('), 큰따옴표(")
a='abc song'
b='he said, "abcd..."'
c='It\'s my computer'
d="abc song"
e="It's my computer"
f="he said, \"abcd...\""

# 개행 : 특수문자 (\), 이스케이프 코드 (\n)
g="very good\
very nicd"
h="very good\nvery nice"

# 입력 내용 그대료 표현 : 큰따옴표 3개("""), 작은따옴표 3개(''')
i="""
very good
very nice
"""
j='''
very good
very nice
'''

# 문자열 출력 : print()
print(j)

# 문자열 길이 반환 : len()
len(j)

 

2. 이스케이프 코드

코드 설명
\n 문자열 안에서 줄을 바꿀 때 사용
\t 문자열 사이에 탭 간격을 줄 때 사용
\\ 문자 \를 그대로 표현할 때 사용
\' 작은따옴표(')를 그대로 표현할 때 사용
\" 큰따옴표(")를 그대로 표현할 때 사용
\r 캐리지 리턴(줄 바꿈 문자, 현재 커서를 가장 앞으로 이동)
\f 폼 피드(줄 바꿈 문자, 현재 커서를 다음 줄로 이동)
\a 벨 소리(출력할 때 PC 스피커에서 '삑' 소리가 난다)
\b 백 스페이스
\000 널 문자

 

3. 문자열 연산

# 문자열 합 : +
'very ' + 'good!'

# 문자열 곱 : *
'very ' * 5

# 문자열 복합 연산 예시
'very ' * 5 + 'good!'

 

4. 문자열 인덱싱

인덱싱은 0부터 시작. 음수는 우측 끝부터로 -1부터 시작. (0과 -0은 동일하므로)

a="ABC song is very good!"

# 인덱스를 통한 문자열 부분 확인 : [위치]
a[0]	# 결과 : 'A'
a[-0]	# 결과 : 'A'
a[4]	# 결과 : 's'
a[-1]	# 결과 : '!'
a[-7]	# 결과 : 'y'

 

5. 문자열 슬라이싱

기호 : 를 기준으로 시작위치 와 끝위치를 표현. 이때, 끝 위치는 포함하여 표현하지 않음.

(즉, [3:6] 이면 인덱스 3번 위치부터 인덱스 6번 이전 위치까지 표현.)

a="ABC song is very good!"

# 슬라이싱(끝 위치는 미포함) : [시작위치:끝위치]
a[2:10]	# 결과 : 'C song i'
a[5:]	# 결과 : 'ong is very good!'
a[:6]	# 결과 : 'ABC s'
a[:]	# 결과 : 'ABC song is very good!'
a[9:-7]	# 결과 : 'is ver'

 

6. 문자열 포맷팅

문자열 안의 특정 부분을 변경할 수 없지만, 문자열 포맷 코드를 사용하여 문자열 안의 특정 값을 변경할 수 있도록 하는 기법.

a=3
b="three"
c=3.141592653589

# 숫자 대입
"I need %d apples" % 3			# 결과 : 'I need 3 aplles'
"I need %d apples" % a			# 결과 : 'I need 3 aplles'
"I need {0} aplles".format(3)		# 결과 : 'I need 3 aplles'
"I need {a} aplles".format(a=3)		# 결과 : 'I need 3 aplles'
f"I need {a} aplles"			# 결과 : 'I need 3 aplles'

# 문자 대입
"I need %s apples" % "three"		# 결과 : 'I need three aplles'
"I need %s apples" % b			# 결과 : 'I need three aplles'
"I need {0} aplles".format("three")	# 결과 : 'I need three aplles'
"I need {b} aplles".format(b="three")	# 결과 : 'I need three aplles'
f"I need {b} aplles"			# 결과 : 'I need three aplles'

# 소숫점 표현
"%0.2f" % 3.141592653589		# 결과 : '3.14'
"%0.2f" % c				# 결과 : '3.14'
"{0:0.2f}".format(3.141592653589)	# 결과 : '3.14'
"{0:0.2f}".format(c)			# 결과 : '3.14'
f"{c:0.2f}"				# 결과 : '3.14'

# 2개 이상의 값 대입 (% 사용 시 값이 숫자인지 문자인지 확실치 않을 때는 %s 를 사용. (자동 문자열 변환됨.))
"I have %s kids and I need %d apples" % (b, a)			# 결과 : 'I have three kids and I need 3 apples'
"I have %s kids and I need %s apples" % (b, a)			# 결과 : 'I have three kids and I need 3 apples'
"I have {0} kids and I need {1} apples".format(b, a)		# 결과 : 'I have three kids and I need 3 apples'
"I have {b} kids and I need {a} apples".format(a=3, b="three")	# 결과 : 'I have three kids and I need 3 apples'
f"I have {b} kids and I need {a} apples"			# 결과 : 'I have 3 kids and I need three apples'

# % 기호 사용 시엔 %% 로 사용.
"I'm in the top %d%%." % 1	# 결과 : "I'm in the top 1%."

# 정렬과 공백
"%10s!" % "test"		# 결과 : '      test!'
"{0:>10}!".format("test")	# 결과 : '      test!'
f"{'test':>10}!"		# 결과 : '      test!'
"%-10s!" % "test"		# 결과 : 'test      !'
"{0:<10}!".format("test")	# 결과 : 'test      !'
f"{'test':<10}!"		# 결과 : 'test      !'
"{0:^10}!".format("test")	# 결과 : '   test   !'
f"{'test':^10}!"		# 결과 : '   test   !'

# 공백채우기
"{0:=^10}".format("test")	# 결과 : '===test==='
f"{'test':=^10}"		# 결과 : '===test==='
"{0:0<10}".format("3")		# 결과 : '3000000000'
f"{3:0<10}"			# 결과 : '3000000000'

# {} 사용 시 중괄호 표현
"{{ like }}".format()		# 결과 : '{ like }'
f"{{ like }}"			# 결과 : '{ like }'

 

7. 문자열 포맷 코드

값의 자료형이 모호할 땐 %s 로 사용하면, 자동 문자열 변환처리 됨.

코드 설명
%s 문자열(String)
%c 문자 1개(character)
%d 정수(Integer)
%f 부동소수(floating-point)
%o 8진수
%x 16진수
%% Literal % (문자 % 자체)

 

8. 문자열 관련 함수

일반적으로 문자열 변수 뒤 . 를 붙인 후 함수명을 써서 사용.

a="I need 3 apples"
b=" come on! "
c="a:b:c"

# count : 포함 문자 수량 반환
a.count('e')		# 결과 : 3

# find : 인덱스 위치 반환 (없을 경우 -1 반환)
a.find('e')		# 결과 : 3
a.find('x')		# 결과 : -1

# index : 인덱스 위치 반환 (없을 경우 오류 발생)
a.index('e')		# 결과 : 3
a.index('x')		# 결과 : 오류

# join : 문자열 삽입
','.join(a)		# 결과 : 'I, ,n,e,e,d, ,3, ,a,p,p,l,e,s'

# lower : 소문자로 변환
a.lower()		# 결과 : 'i need 3 apples'

# upper : 대문자로 변환
a.upper()		# 결과 : 'I NEED 3 APPLES'

# lstrip : 좌측 공백 제거
b.lstrip()		# 결과 : 'come on! '

# rstrip : 우측 공백 제거
b.rstrip()		# 결과 : ' come on!'

# strip : 좌우측 공백 제거
b.strip()		# 결과 : 'come on!'

# replace : 문자열 변경
a.replace("3", "5")	# 결과 : 'I need 5 apples'

# split : 문자열 나누기
a.split()		# 결과 : ['I', 'need', '3', 'apples']
c.split(":")		# 결과 : ['a', 'b', 'c']

 

'개발 이야기 > Python' 카테고리의 다른 글

Python - 06. 튜플(Tuple) 자료형  (0) 2021.07.17
Python - 05. 리스트(list) 자료형  (0) 2021.07.17
Python - 03. 숫자 자료형  (0) 2021.07.16
Python - 02. 기초 문법  (0) 2021.07.15
Python - 01. 시작하기  (0) 2021.07.14