※ 이 글은 책 「파이썬 코딩도장」의 내용을 재정리한 내용임
- 파이썬 시리즈 글 순서-> 링크
1) 문자열 다시 정리
● 문자열(String)이란?
- 문자 단어 등으로 구성된 문자들의 집합을 의미
- 'Hello World!', 'a', '123' 등을 문자열이라고 함
- 문자열은 리스트, 튜플과 마찬가지로 시퀀스 객체이며 시퀀스 객체에 쓸 수 있는 메소드를 사용할 수 있음
● 시퀀스 자료형에 쓸 수 있는 것들( 3장 中)
-특정값 있는지 확인하기: 값 in 시퀀스
-특정값 없는지 확인하기: 값 not in 시퀀스
-시퀀스 연결하기: 시퀀스1 + 시퀀스2 (range는 불가)
-시퀀스 반복: 시퀀스1 * 정수 (range는 불가)
-시퀀스 인덱스: 시퀀스[인덱스] (0부터 시작)(-1=뒤에서 첫째)
-시퀀스 슬라이스: 시퀀스[시작인덱스:끝인덱스+1:증가폭]
-시퀀스 슬라이스 요소 할당:
시퀀스[시작인덱스:끝인덱스+1:증가폭] = [요소1, 요소2,...]
- 이제 문자열에 쓸 수 있는 메소드를 알아보자
2) 문자열 메소드
메소드 | 설명 | 예시 | |
연결 | '기호'.join([문자열]) | 문자열 리스트 요소를 '기호' 로 연결하여 하나의 문자열로 반환 | a = ['사과', '레몬', '배'] s = '-'.join(a) print(s) # '사과-레몬-배' |
분리 | '문자열'.split() | 문자열 분리하여 리스트로 반환 | s = '사과-레몬-배' a = s.split('-') print(a) # ['사과', '레몬', '배'] |
삭제 | ' 문자열 '.lstrip() | 왼쪽 공백 삭제 | s = ' apple ' l = s.lstrip() print(l) # 'apple ' |
' 문자열 '.rstrip() | 오른쪽 공백 삭제 | s = ' apple ' r = s.rstrip() print(r) # ' apple' |
|
' 문자열 '.strip() | 양쪽 공백 삭제 | s = ' apple ' o = s.strip() print(o) # 'apple' |
|
'문자열'.lstrip('삭제할 문자들') | 왼쪽 특정 문자 삭제 | a = ', python.' s = a.lstrip(',.') print(s) # ' python' |
|
'문자열'.rstrip('삭제할 문자들') | 오른쪽 특정 문자 삭제 | a = ',python.' s = a.rstrip(',.') print(s) # ', python' |
|
'문자열'.strip('삭제할 문자들') | 양쪽 특정 문자 삭제 | a = ',python.' s = a.strip(',.') print(s) # ' python' |
|
'문자열'.strip(string.punctuation) | 모든 구두점 삭제 !"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ |
import string a = ', python. ' s = a.strip(string.punctuation) print(s) # ' python' |
|
교체 | replace('바꿀 문자열', '새 문자열') | 특정 문자열을 다른 문자열로 대체함 | s = "Hello World!" s = s.replace("world", "python") print(s) # Hello python! |
변환테이블 =str.maketrans('바꿀문자', '새 문자') '문자열'.translate(변환테이블) |
- 변환테이블: 어떤 문자를 뭘로 대체할지 지정 - 특정 문자를 모두 찾아 다른 문자로 전환 |
s = "Hello World!" t = str.maketrans('eo', '12') s.translate(t) print(s) # H1ll2 W2rld! |
|
정렬 | ljust(길이) | 문자열을 지정된 길이로 만든 뒤 왼쪽 정렬하여 남는 공간을 공백으로 채움 | a = 'python' s = a.ljust(10) print(s) # 'python ' |
rjust(길이) | 문자열을 지정된 길이로 만든 뒤 오른쪽 정렬하여 남는 공간을 공백으로 채움 | a = 'python' s = a.rjust(10) print(s) # ' python' |
|
center(길이) | 문자열의 길이를 지정된 길이로 만든 뒤 가운데 정렬하고 양옆 공간을 공백으로 채움(남는 공간 홀수라면 왼쪽 공백이 한칸 더 들어감) | a = 'python' s = a.center(10) print(s) # ' python ' |
|
zfill(길이) | 지정된 길이에 맞춰 문자열 왼쪽에 0을 채움(문자열길이>지정된 길이 라면 아무것도 채우지 않음) | a = 'python' s = a.zfill(10) print(s) # '0000python' |
|
검색 | find(찾을문자열) | - 왼쪽에서부터 문자열 찾아 인덱스 반환, 문자열 없으면 -1 반환 - 같은 문자가 여러개일 경우 처음 찾은 문자열 인덱스 반환 |
a = 'apple pinapple' s = a.find('pl') print(s) # 2 |
rfind(찾을문자열) | - 오른쪽에서부터 문자열 찾아 인덱스 반환, 문자열 없으면 -1 반환 - 같은 문자가 여러개일 경우 처음 찾은 문자열 인덱스 반환 |
a = 'apple pinapple' s = a.find('pl') print(s) # 12 |
|
index(찾을문자열) | 왼쪽에서부터 문자열 찾아 인덱스 반환, 문자열 없으면 에러 발생 - 같은 문자가 여러개일 경우 처음 찾은 문자열 인덱스 반환 |
a = 'apple pinapple' s = a.index('pl') print(s) # 2 |
|
rindex(찾을문자열) | 오른쪽에서부터 문자열 찾아 인덱스 반환, 문자열 없으면 에러 발생 - 같은 문자가 여러개일 경우 처음 찾은 문자열 인덱스 반환 |
a = 'apple pinapple' s = a.rindex('pl') print(s) # 12 |
|
개수 | count(개수셀문자열) | 현재 문자열에서 특정문자열의 개수를 세어 반환 | a = 'apple pinapple' s = a.count('pl') print(s) # 2 |
3) 문자열 서식지정자
● 서식지정자(format specifier)란?
a = 1.0252864
print('철수는',a,'살이다.')
# 철수는 1.0252864살이다.
- 위의 코드에서 a를 출력하고 싶어서 print()를 쓸 때는 쉼표로 연결을 해야했다
- 게다가 소수 둘째자리까지만 출력하고 싶은데 a라는 변수에 할당된 값이 복잡한 계산과정을 걸쳐 나왔기 때문에 실수로 나왔다고 가정해보자
- a값에 대한 변화없이 출력만 깔끔하게 할 방법은 없을까?
- 출력 식을 쓸 때 좀 더 간단하게 쓸 방법은 없을까?
- 그래서 나온 것이 '서식 지정자'이다
● 서식 지정자 종류
- 역시나 표로 정리해보자
방법 | 설명 | 예시 | ||
문자열 | '%s' % '문자열' | %s 자리에 문자열을 넣어 출력 | a = ' I am %s.' % 'james' print(a) # I am james. |
|
'%길이s' % '문자열' | 문자열을 지정된 길이로 만든뒤 오른쪽 정렬하고 남은 공간 공백으로 채움 | a = '%10s' % 'python' print(a) # ' python' |
||
'%-길이s' % '문자열' | 문자열을 지정된 길이로 만든뒤 왼쪽 정렬하고 남은 공간 공백으로 채움 | a = '%-10s' % 'python' print(a) # 'python ' |
||
숫자 | 정수 | '%d' % 숫자 | %d 자리에 숫자를 넣어 출력(d = 10진 정수를 의미) | a = ' I am %d years old' % 20 print(a) # I am 20 years old |
'%자릿수d' % 숫자 | 숫자를 지정된 길이로 만들고 오른쪽 정렬하여 남은공간 공백으로 채움 | a = '%10d' % 200 print(a) # ' 200' |
||
'%0길이d' % 숫자 | 숫자를 지정된 길이로 만들고 오른쪽 정렬하여 남은공간 0으로 채움 | a = '%010d' % 200 print(a) # '0000000200' |
||
실수 | '%f' % 숫자 | %f 자리에 숫자를 넣어 출력 (f = 고정 소수점을 의미) (기본적으로 소수점 이하 6자리까지 표시 |
a = '무게는 %f kg이다' % 3 print(a) # 무게는 3.000000kg이다 |
|
'%. 자릿수f' % 숫자 | %f 자리에 숫자를 넣어 출력 (자릿수까지만 출력) |
a = '무게는 %. 2f kg이다' % 3 print(a) # 무게는 3.00kg이다 |
||
'%길이. 자릿수f' % 숫자 | 지정된 자리만큼 잘라서 지정된 길이만큼 만들고 남은 공간 공백으로 채워 출력 | a = '%10.2f' % 2.3 print(a) # ' 2.30' |
||
'%0개수. 자릿수f' % 숫자 | 지정된 자리만큼 잘라서 지정된 길이만큼 만들고 남은 공간 0으로 채워 출력 | a = '%010.2f' % 2.3 print(a) # '0000002.30' |
||
숫자 문자 함께 | '%d %s' % (숫자, '문자열') | 괄호 안에 값을 콤마로 구분해서 넣음, 서식지정자 개수= 값개수이어야함 | a = '오늘은 %d %s.' % (3, 'April') print(a) # '오늘은 3 April.' |
4) format 메서드
● format 메서드란?
- 서식지정자보다 더 간단한 문자열 포매팅 방식
- { }안에 포매팅 지정 후 값을 넣음
- 기본형태
'{인덱스}'.format(값)
- 코드 봅시다
a = 'Hello'
b = 'world!'
print('{0} {1}'.format(a, b))
# Hello world!
- 이때 인덱스 순서를 바꾼다면?
a = 'Hello'
b = 'world!'
print('{1} {0}'.format(a, b))
# world! Hello
- 출력순서도 바뀐다. 그렇다면 인덱스를 적지 않으면?
a = '내 나이는'
b = 30
print('{kor} {age}'.format(kor = a, age = b))
# 내 나이는 30
- 지정한 순서대로 값이 들어감
- 인덱스 대신 이름 지정도 가능함
★ f-string
- 이건 앞의 포맷팅 방식보다 더 간단한 문법이다
- 기본형태
f'문자열 {변수}'
- 예시를 보자
a = '내 나이는'
b = 30
print(f'{a} {b}')
# 내 나이는 30
● 문자열 정렬하기
- 앞에서 서식 지정자나 함수(ljust, rjust, center)로 문자열을 정렬하였다
- format 메서드로도 문자열 정렬이 가능하다
- 기본 형태
'{인덱스:<길이}'.format(값)
'{인덱스:>길이}'.format(값)
- 예시 고!
a = '{0:<10}'.format('python') #왼쪽정렬
b = '{0:>10}'.format('python') #오른쪽정렬
print(a)
print(b)
# 'python '
# ' python'
● 숫자 개수 맞추기
- 001, 002, ...035와 같은 식으로 숫자를 출력하고 싶을 땐 이렇게 하자
- 기본형태
'{인덱스:0개수d}'.format(숫자)
'{인덱스:0개수.자릿수f}'.format(숫자)
- 예시봅시다
'{0:03d}'.format(35)
# '035'
'{0:08.2f}'.format(150.37)
# '00150.37'
● 채우기와 정렬 조합
- 포매팅은 채우기와 정렬을 조합해서 사용가능함
- 기본형태
'{인덱스: [채우기][정렬][길이][.자릿수][자료형]}'
- 예시봅시다
'{0:0<10}'.format(15) # 길이 10, 왼쪽으로 정렬하고 남는 공간은 0으로 채움
# '1500000000'
'{0:0>10}'.format(15) # 길이 10, 오른쪽으로 정렬하고 남는 공간은 0으로 채움
# '0000000015'
'{0:0>10.2f}'.format(15) # 길이 10, 오른쪽으로 정렬하고 소수점 자릿수는 2자리
# '0000015.00'
'{0: >10}'.format(15) # 남는 공간을 공백으로 채움
# ' 15'
'{0:x>10}'.format(15) # 남는 공간을 문자 x로 채움
# 'xxxxxxxx15'
● 금액 천단위 콤마 넣기
- 1000000을 1,000,000으로 출력하려면 어떻게 해야할까?
- 기본형태 => format(숫자, ',')
- 응용(1) => 서식지정자와 함께 사용
'%20s' % format(1493500, ',') # 길이 20, 오른쪽으로 정렬
# ' 1,493,500'
- 응용(2) => 포매팅에서 사용(자릿수 뒤에 콤마)
'{0:0>10,.2f}'.format(1500)
# '001,500.00'
마무리 정리
- '{0:0>10,.2f}'.format(1500)을 해석하면
- '{0:0>10,.2f}'.format(1500) format 괄호안의 값에 대해
- '{0:0>10,.2f}'.format(1500) 0번째 값을 가져와서
- '{0:0>10,.2f}'.format(1500) 소수 둘째자리까지 표시
- '{0:0>10,.2f}'.format(1500) 콤마로 백자리씩 구분
- '{0:0>10,.2f}'.format(1500) 10자가 들어갈 공간을 만듦
- '{0:0>10,.2f}'.format(1500) 오른쪽 정렬하고
- '{0:0>10,.2f}'.format(1500) 만들어진 공간 중 빈 공간을 0으로 채움
이라는 뜻임!
- 이해가 된다면 이 장을 넘어가도 좋다
'Tips > Python' 카테고리의 다른 글
[Py린이를 위한 Python 기초] 9. 함수 (0) | 2023.09.01 |
---|---|
[Py린이를 위한 Python 기초] 8. 파일 사용하기 (0) | 2023.07.20 |
[Py린이를 위한 Python 기초] 6. 딕셔너리 응용 (410) | 2023.02.28 |
[Py린이를 위한 Python 기초] 5. 리스트 응용 (0) | 2023.02.22 |
[Py린이를 위한 Python 기초] 4. 조건문, 반복문 (386) | 2023.02.22 |
댓글