[처음 시작하는 파이썬] ch5. 텍스트 문자열

2023. 1. 19. 18:15파이썬/[처음 시작하는 파이썬] 개념

문자열은 일련의 문자입니다.

문자, 숫자, 기호, 문장 부호 및 공백, 줄바꿈 같은 지시문이 문자에 해당합니다.

 

5.1 따옴표로 문자열 생성

작은 따옴표(' ')

큰 따옴표(" ")

세 개의 작은 따옴표(''' ''') => 여러 줄의 문자열 가능

세 개의 큰 따옴표(""" """)

 

5.2 문자열 타입으로 변환: str( )

string을 따서 str인 겁니다.

 

 

str() 

print(str(1.0e4))
print(str(99.9))
print(str(True))
10000.0
99.9
True

 

5.3 이스케이프 문자: \

표현하고 싶은 문자 앞에 붙여서 써줍니다.

 

이스케이프 시퀀스

\n : 줄바꿈

\t : 탭

\' : 작은따옴표(') 그자체를 표현

\" : 큰따옴표(") 그자체를 표현

\\ : 백슬래시(\) 그자체를 표현

 

원시문자열 r' ' 안에 이스케이프 문자를 쓴다면 이스케이프 문자 사용은 무효화됩니다.

 

print(r'안녕 \n안녕하세요')

 

안녕 \n안녕하세요

 

5.4 결합하기: +

5.5 복제하기: *

 

5.6 문자 추출: [ ]

문자열에서 한 문자 이름을 얻으려면 문자열 이름 뒤에 대괄호 [ ]
그리고 그 안에 오프셋을 지정합니다.
오프셋은 0부터 시작하여 1 2 3 4 5 .. 순으로 진행됩니다.
역으로 오프셋을 진행하려면 -1을 대괄호 안에 써주면 되는데
이렇게 마이너스 오프셋을 써주면 문자열의 수를 셀 필요가 없다는 장점이 있습니다.
korean = '가나다라마바사'
print(korean[0])
print(korean[-1])
print(korean[7])


IndexError: string index out of range

예시를 보면 korean 문자열의 [0]은 '가'를 불러오고,

[-1]는 '사'를 불러옵니다.

 

[1]은 '나'를 [2]는 '다'를 불러오고

[-2]는 '바'를 [-3]은 '마'를 불러오겠군요.

 

[7]에서 에러가 난 이유는 문자열의 길이를 벗어났기 때문입니다.

'가나다라마바사'의 오프셋은 0부터 6까지 있으니까요.

 

문자열의 특정 인덱스에 문자를 삽입하거나 변경하기 => 불가능

name = '공자'
name[0] = '맹'
TypeError: 'str' object does not support item assignment

공자를 맹자로 바꿔주고 싶어서 name[0] 자리를 '맹'으로 변경하려했으나

에러가 납니다.

문자열이 불변하기 때문에 특정 인덱스에 문자를 삽입 변경하는 것은 불가능합니다.

 

문자열 교체하여 출력하기 => replace(), 슬라이스

.replace('교체하고 싶은 기존 문자열', '교체하고 싶은 신규 문자열') 

name = '공자'

name.replace('공', '맹')
print(name)
name = name.replace('공', '맹')
print(name)
공자
맹자

문자열은 불변하기 때문에

.replace()를 썼는데도 name을 출력했을 땐 그대로 '공자'입니다.

그런데 이 자체를 name에 할당해주면 name이 맹자가 되겠죠!

 

슬라이스 [ 추출시작하기 원하는 오프셋 : 추출끝내기 원하는 오프셋 의 뒷 숫자: 간격]

name = '공자'
'순' + name[1:]
print(name)
name = '순' + name[1:]
print(name)
공자
순자

슬라이스를 썼을 때도 마찬가지입니다.

문자열은 불변하기 때문에

슬라이스를 썼는데도 name을 출력했을 땐 그대로 '공자'입니다.

그런데 이 자체를 name에 할당해주면 name이 순자가 되겠죠!

 

5.7 슬라이스로 부분 문자열 추출 [start:end:step]

위에서 본 슬라이스 입니다.

슬라이스는 한 문자열에서 문자열의 일부를 추출하는 개념입니다.

 

예시를 보면서 이해하면 쉽습니다.

HBD = "Happy Birthday"
print(HBD[:])
print(HBD[6:])
print(HBD[:5])
print(HBD[6:14])
print(HBD[-3:])
print(HBD[6:-3])
print(HBD[::2])
print(HBD[0:5:2])
Happy Birthday => [ : ] 처음부터 끝까지 전체 시퀀스 추출합니다.
Birthday => [6: ] 6 오프셋부터 끝까지
Happy => [:5] 처음부터 5 오프셋까지
Birthday => [6:14] 6 오프셋부터 13 오프셋까지
day => [-3: ] -3오프셋부터 끝까지
Birth => [6:-3] 6오프셋부터 -4 오프셋까지
HpyBrha => [::2] 처음부터 끝까지 2스텝씩 건너뛰면서
Hpy => [0:5:2] 0 오프셋부터 4 오프셋까지 2스텝씩 건너뛰면서

끝 오프셋은 실제 오프셋 +1 해서 써줘야합니다.

 

5.8 문자열 길이: len( )

 

len()은 다른 시퀀스 타입에서도 사용가능합니다.

5.9 문자열 나누기: split( )

이는 문자열에 특정한 함수입니다.

 

.split() : 어떤 구분자를 기준으로 하나의 문자열을 작은 문자열들의 리스트로 나눠준다.

 

태티서 = '태연, 티파니, 서현'
print(태티서.split(','))
['태연', ' 티파니', ' 서현']

',' 구분자를 기준으로 리스트로 출력이 됩니다.

 

5.10 문자열 결합하기: join( )

위에서는 하나의 문자열을 여러개의 문자열로 나눠서 리스트에 하나로 넣어줬습니다.

이렇게 만들어진 리스트 안 여러개의 문자열을 결합할 수 있습니다.

 

'string'.join(리스트) : 문자열 리스트를 하나의 문자열로 결합한다.

태티서_list = ['태연','티파니','서현']
print('&'.join(태티서_list))
태연&티파니&서현

 

5.11 문자열 대체하기: replace( )

너무너무너무 = '''날 너무너무너무 너무너무너무 너무너무너무
너무너무너무너무너무너무너무너무 좋아하면 그때 말해줘
'''

print(너무너무너무.replace('너무','자꾸'))
날 자꾸자꾸자꾸 자꾸자꾸자꾸 자꾸자꾸자꾸 자꾸자꾸자꾸자꾸자꾸자꾸자꾸자꾸 좋아하면 그때 말해줘

'너무'를 '자꾸'로 모두 바꿔줍니다.

 

너무너무너무 = '''날 너무너무너무 너무너무너무 너무너무너무
너무너무너무너무너무너무너무너무 좋아하면 그때 말해줘
'''

print(너무너무너무.replace('너무','자꾸',3))
날 자꾸자꾸자꾸 너무너무너무 너무너무너무 너무너무너무너무너무너무너무너무 좋아하면 그때 말해줘

'너무'에서 '자꾸'로 3회까지 바꿨습니다.

 

5.12 문자열 스트립: strip( ) / lstrip( ) / rstrip( )

world = " we are the world "
print(world.strip(' '))
print(world.lstrip())
print(world.rstrip())
'we are the world'  # 양쪽 공백이 사라짐
'we are the world    ' # 왼쪽 공백이 사라짐
'    we are the world'   # 오른쪽 공백이 사라짐

맨 앞 혹은 맨 뒤의 공백을 제거해줍니다.

 

blurt = "What the...!!?"
print(blurt.strip('.?!'))
print(blurt.strip('...'))
print(blurt.strip('?'))
What the
What the...!!?
What the...!!

가장자리에 있어야 제거가 가능합니다.

 

5.13 검색과 선택: .find( ), .index( )

뽀로로 = "노는 게 제일 좋아. 친구들 모여라."

print(뽀로로.find('.'))
print(뽀로로.index('.'))

print(뽀로로.rfind('.'))
print(뽀로로.rindex('.'))

print(뽀로로.find('싫어'))
# print(뽀로로.index('싫어')) ValueError : substring not found

print(뽀로로.count('.'))
10 # 첫번째로 나온 '.'을 찾아줍니다.
10

19 # 끝에서부터 '.'을 찾아줍니다.
19

*차이점
-1 # .find()가 못 찾았을 땐 -1을 출력합니다.
error #.index()가 못 찾았을 땐 에러가 납니다.

 

5.14 대소 문자

.capitalize( ) : 문장 첫번째 단어의 첫 글자를 대문자로 만든다.

.title( ) : 문장 모든 단어의 첫 글자를 대문자로 만든다.

.upper( ) : 모든 단어를 대문자로 만든다.

.lower( ) : 모든 단어를 소문자로 만든다.

setup = 'A duck goes into a bar...'

print(setup.capitalize())
print(setup.title())
print(setup.upper())
print(setup.lower())
A duck goes into a bar...
A Duck Goes Into A Bar...
A DUCK GOES INTO A BAR...
a duck goes into a bar...

 

5.15 정렬

.center( 공간을 만들어주는 숫자) : 가운데 정렬 

.ljust( 공간을 만들어주는 숫자) :  왼쪽 정렬

.rjust( 공간을 만들어주는 숫자) :  오른쪽 정렬

setup = 'A duck goes into a bar...'

print(setup.center(30))
print(setup.ljust(30))
print(setup.rjust(30))
    A duck goes into a bar...
A duck goes into a bar...
         A duck goes into a bar...

 

5.16 포매팅

https://jnk2001.tistory.com/17