문자열도 시퀀스 자료형이라 리스트와 비슷한 점이 많다.
1. 문자열 바꾸기
replace('바꿀문자열', '새문자열')
# 다른 문자열로 바꾸기
>>> 'Hello, world!'.replace('world', 'Python')
'Hello, Python!'
# 바뀐 결과값 유지
>>> s = 'Hello, world!'
>>> s = s.replace('world!', 'Python')
>>> s
'Hello, Python'
2. 문자 바꾸기
translate
str.maketrans('바꿀문자', '새문자')
로 변환 테이블을 만든 후 translate(테이블)
사용>>> table = str.maketrans('aeiou', '12345')
>>> 'apple'.translate(table)
'1ppl2
3. 문자열 분리하기
split()
split('기준문자열')
: 기준 문자열로 문자열 분리>>> 'apple pear grape pineapple orange'.split()
['apple', 'pear', 'grape', 'pineapple', 'orange']
# 콤마(,)로 문자열 분리
>>> 'apple, pear, grape, pineapple, orange'.split(', ')
['apple', 'pear', 'grape', 'pineapple', 'orange']
4. 구분자 문자열과 문자열 리스트 연결하기
join(리스트)
# 각 문자열 사이에 공백
>>> ' '.join(['apple', 'pear', 'grape', 'pineapple', 'orange'])
'apple pear grape pineapple orange'
# 각 문자역 사이에 -
>>> '-'.join(['apple', 'pear', 'grape', 'pineapple', 'orange'])
'apple-pear-grape-pineapple-orange'
5. 소문자를 대문자로 바꾸기
upper()
>>> 'python'.upper()
'PYTHON'
6. 대문자를 소문자로 바꾸기
lower()
>>> 'PYTHON'.lower()
'python'
7. 왼쪽 공백 삭제하기
lstrip()
>>> ' Python '.lstrip()
'Python '
8. 오른쪽 공백 삭제하기
rstrip()
>>> ' Python '.rstrip()
' Python'
9. 양쪽 공백 삭제하기
strip()
>>> ' Python '.strip()
'Python'
10. 왼쪽의 특정 문자 삭제하기
lstrip('삭제할문자들')
>>> ', python.'.lstrip(',.') # 공백은 넣지 않았으므로 그대로 둔다.
' python.'
11. 오른쪽의 특정 문자 삭제하기
rstrip('삭제할문자들')
>>> ', python.'.rstrip(',.') # 공백은 넣지 않았으므로 그대로 둔다.
', python'
12. 양쪽의 특정 문자 삭제하기
strip('삭제할문자들')
>>> ', python.'.strip(',.') # 공백은 넣지 않았으므로 그대로 둔다.
' python'
📎 참고) 구두점을 간단하게 삭제하기
string
모듈의punctuation
에는 모든 구두점이 들어있다. 다음과 같이strip
메서드에string.punctuation
을 넣으면 문자열 양쪽의 모든 구두점을 간단하게 삭제할 수 있다.>> import string >> ', python.'.strip(string.punctuation) ' python' >> string.punctuation '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
공백까지 삭제하고 싶다면
string.punctuation
에 공백 ' '을 연결해서 넣어주면 된다.>> ', python.'.strip(string.punctuation + ' ') 'python'
메서드 체이닝을 활용해도 된다.🔎
>> ', python.'.strip(string.punctuation).strip() 'python'
13. 문자열을 왼쪽 정렬하기
ljust(길이)
>>> 'python'.ljust(10)
'python '
14. 문자열을 오른쪽 정렬하기
rjust(길이)
>>> 'python'.rjust(10)
' python'
15. 문자열을 가운데 정렬하기
center(길이)
>>> 'python'.center(10)
' python '
>>> 'python'.center(11)
' python '
16. 메서드 체이닝
input().split()
도 input()
이 반환한 문자열에 split
을 호출하는 메서드 체이닝이다.# 문자열을 오른쪽으로 정렬한 뒤 대문자로 바꾸기
>>> 'python'.rjust(10).upper()
' PYTHON'
17. 문자열 왼쪽에 0 채우기
zfill(길이)
>>> '35'.zfill(4) # 숫자 앞에 0을 채움
'0035'
>>> '3.5'.zfill(6) # 숫자 앞에 0을 채움
'0003.5'
>>> 'hello'.zfill(10) # 문자열 앞에 0을 채울 수도 있음
'00000hello'
18. 문자열 위치 찾기
find('찾을문자열')
>>> 'apple pineapple'.find('pl')
2
>>> 'apple pineapple'.find('xy')
-1
19. 오른쪽에서부터 문자열 위치 찾기
rfind('찾을문자열')
>>> 'apple pineapple'.rfind('pl')
12
>>> 'apple pineapple'.rfind('xy')
-1
20. 문자열 위치 찾기
index('찾을문자열')
>>> 'apple pineapple'.index('pl')
2
21. 오른쪽에서부터 문자열 위치 찾기
rindex('찾을문자열')
>>> 'apple pineapple'.rindex('pl')
12
22. 문자열 개수 세기
count('문자열')
>>> 'apple pineapple'.count('pl')
2
문자열 안에서 특정 부분을 원하는 값으로 바꿀 때 서식 지정자 또는 문자열 포매팅을 사용한다.
'%s' % '문자열'
%
로 시작하고 자료형을 뜻하는 문자가 붙는다.%s
는 문자열이라는 뜻이며 string의 s이다.>>> 'I am %s.' % 'james' # 'I am %s.'과 'james' 사이의 %는 따옴표로 묶지 않고 그대로 입력
'I am james.'
# 변수로 지정
>>> name = 'maria'
>>> 'I am %s.' % name
'I am maria.'
'%d' % 숫자
%d
를 넣고 %
뒤에 숫자를 지정%d
는 10진 정수 decimal integer의 d>>> 'I am %d years old.' % 20
'I am 20 years old.'
'%f' % 숫자와 '%.자릿수f' % 숫자
%f
를 사용%f
는 기본적으로 소수점 이하 6자리까지 표시f
앞에 .(점)과 자릿수
지정# '%f' % 숫자
>>> '%f' % 2.3
'2.300000'
# '%.자릿수f' % 숫자
>>> '%.2f' % 2.3
'2.30'
>>> '%.3f' % 2.3
'2.300'
%길이s
>>> '%10s' % 'python'
' python' # 문자열의 길이를 10으로 만든 뒤 지정된 문자열을 넣고 오른쪽 정렬. 남은 공간 공백으로 채움
📎 참고) 자릿수가 다른 숫자 출력하기
- 문자열 오른쪽 정렬은 자릿수가 다른 숫자를 출력할 때 유용
- %d와 %f도 숫자와 조합하여 오른쪽으로 정렬할 수 있다.
%길이d>> '%10d' % 150 ' 150' >> '%10d' % 15000 ' 15000'
%길이.자릿수f
>> '%10.2f' % 2.3 ' 2.30' >> '%10.2f' % 2000.3 ' 2000.30'
실수는 점(.)앞에 정렬할 길이를 정하고, 점 뒤에 소수점 이하 자릿수를 지정한다.
%-길이s
>>> '%-10s' % 'python'
'python '
'%d %s' % (숫자, '문자열')
>>> 'Today is %d %s.' % (3, 'April')
'Today is 3 April.'
# 서식지정자를 서로 붙인 경우
>>> 'Today is %d%s.' % (3, 'April')
'Today is 3April.'
'{인덱스}'.format(값)
{}
) 안에 포매팅을 지정하고 format
메서드로 값을 넣는다.format
에는 { } 부분에 넣을 값 지정>>> 'Hello, {0}'.format('world!')
'Hello, world!'
>>> 'Hello, {0}'.format(100)
'Hello, 100'
>>> 'Hello, {0} {2} {1}'.format('Python', 'Script', 3.6)
'Hello, Python 3.6 Script'
>>> '{0} {0} {1} {1}'.format('Python', 'Script')
'Python Python Script Script'
>>> 'Hello, {} {} {}'.format('Python', 'Script', 3.6)
'Hello, Python Script 3.6'
'Hello, {language} {version}'.format(language='Python', version=3.6)
'Hello, Python 3.6'
>>> language = 'Python'
>>> version = 3.6
>>> f'Hello, {language} {version}'
'Hello, Python 3.6'
📎 참고) 중괄호 출력하기
{ } 중괄호 자체를 출력할 때는 {{, }}처럼 중괄호를 두 번 사용>> '{{ {0} }}'.format('Python') '{ Python }'
'{인덱스:<길이}'.format(값)과 '{인덱스:>길이}'.format(값)
:
)을 붙이고 정렬할 방향과 길이를 지정>>> '{0:<10}'.format('python') # 부등호 방향이 왼쪽이므로 왼쪽으로 정렬한 후 남는 공간을 공백으로 채움
'python '
>>> '{0:>10}'.format('python') # 부등호 방향이 오른쪽이므로 오른쪽으로 정렬한 후 남는 공간을 공백으로 채움
' python'
:
)과 정렬 방법만 지정해도 된다.>>> '{:>10}'.format('python')
' python'
1) 정수
>>> '%03d' % 1
'001'
>>> '{0:03d}'.format(35)
'035'
2) 실수
>>> '%08.2f' % 3.6
'00003.60'
>>> '{0:08.2f}'.format(150.37)
'00150.37'
'{인덱스:[[채우기]정렬][길이][.자릿수][자료형]}'
f
를 지정>>> '{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:>10}'.format(15) # 채우기 부분을 생략하면 공백이 들어감
' 15'
>>> '{0:x>10}'.format(15) # 남는 공간을 문자 x로 채움
'xxxxxxxx15'
📎 참고) 금액에서 천단위로 콤마 넣기
format 내장 함수를 사용하는 방법# format(숫자, ',') >> format(1493500, ',') '1,493,500' # 서식 지정자와 함께 >> '%20s' % format(1493500, ',') # 길이 20, 오른쪽으로 정렬 ' 1,493,500' # 포매팅에서 콤마를 넣으려면 콜론(`:`)뒤에 콤마(`,`)를 지정 >> '{0:,}'.format(1493500) '1,493,500' # 정렬할 시 정렬 방향과 길이 뒤에 콤마 지정 >> '{0:>20,}'.format(1493500) # 길이 20, 오른쪽으로 정렬 ' 1,493,500' >> '{0:0>20,}'.format(1493500) # 길이 20, 오른쪽으로 정렬하고 남는 공간은 0으로 채움 '000000000001,493,500'
다음 소스 코드를 완성하여 파일 경로에서 파일명만 출력되게 만드세요. 단, 경로에서 폴더의 깊이가 달라지더라도 파일명만 출력할 수 있어야 합니다.
# 문제
path = 'C:\\Users\\dojang\\AppData\\Local\\Programs\\Python\\Python36-32\\python.exe'
_________________________________
...
_________________________________
print(filename)
# 실행결과
python.exe
# 정답
x = path.split('\\')
filename = x[-1]
또는
x = path.split('\\')
x.reverse()
filename = x[0]
또는
filename = path[path.rfind('\\') + 1:]
파일 경로 path
에서 파일명만 출력해야 하는데 경로에서 폴더의 깊이는 달라질 수 있다고 했으므로 path
를 '\\'
기준으로 분리한 뒤 리스트에서 마지막 요소 직접 가져오면 폴더의 깊이가 달라졌을 때 파일명을 가져올 수 없다.
이때는 filename = x[-1]
과 같이 인덱스를 -1로 지정해서 마지막 요소를 가져온다.
또는, reverse
로 리스트의 순서를 뒤집어준 뒤 filename = x[0]
처럼 첫 번째 요소를 가져오면 된다.
(파일 경로에서 항상 마지막은 파일명이므로)
rfind
를 사용해서도 파일명을 구할 수 있다.
path.rfind('\\')
와 같이 rfind
를 사용하여 오른쪽에서부터 '\\'
의 인덱스를 찾는다.
path[path.rfind('\\') + 1:]
와 같이 찾은 인덱스 + 1부터 문자열의 마지막까지 가져오면 파일명을 가져올 수 있다.
\
는 제어 문자를 위한 이스케이프이므로 \
문자 자체를 찾을 때는 \
를 두 번 써야한다.
📎 참고) raw 문자열 사용하기
문자열 앞에 r 또는 R을 붙이면 raw 문자열이 된다.
raw 문자열은 이스케이프 시퀀스를 그대로 저장할 때 사용
즉,\
를\\
로 두 번 쓰지 않고 한 번만 써도 됩니다.python >> print(r'C:\Users\dojang\AppData\Local\Programs\Python\Python36-32\python.exe') C:\Users\dojang\AppData\Local\Programs\Python\Python36-32\python.exe
raw는 가공되지 않고 있는 그대로라는 뜻으로 이스케이프 시퀀스를 문자 그대로 표현한다.
>> print(r'1\n2\n3\n') 1\n2\n3\n