파이썬- 문자열 관련 문법(포매팅, strip, split, join)
<문자열 포맷 코드>
코드 | 설명 |
%s | 문자열 |
%c | 문자 1개 |
%d | 정수 |
%f | 부동 소수 |
%o | 8진수 |
%x | 16진수 |
%% | 리터럴% (문자'%' 그 자체) |
이러한 문자열 포맷 코드를 문자열 안에 삽입한 뒤, 문자열 밖에서(끝에서) %넣을 값을 써주면 된다.
"I eat %d apples." %3 #I eat 3 apples.
number=3
"I eat %d apples." %number #I eat 3 apples.
"I eat %s apples." %"five" #I eat five apples.
day="three"
"I ate %d apples. so I was sick for %s days." %(number,day)
#I ate 3 apples. so I was sick for three days.
사실 %s 포맷 코드는 %뒤의 값이 어떤 형태의 값이든 문자열로 바꾸기 때문에
소수, 정수, 문자 등 모두 %s를 사용하여 문자열에 넣을 수 있다.
<format 함수를 사용한 포맷팅>
"I ate {0} apples. so I was sick for {day} days.".format(10, day=3)
#I ate 10 apples. so I was sick for 3 days."
<소수점 >
"%0.4f" %3.1415926535 #3.1415
"%10.4f" %3.1415926535 # 3.1415 => 정수부분의 길이가 10으로 늘어남
#format 함수 이용
"{0:0.4f}".format(3.1415912) #3.1415
"{0:10.4f}".format(3.1415912) # 3.1415
%전체 길이.소수점 뒤에 나올 숫자의 갯수f
%0.~f => 그냥 그대로 출력인데 뒤에 소수점 갯수만 조정
%10.4f =>전체 길이가 10인데 소수점 4째자리까지 출력 => 빈 공간 10-6=4개 남으므로 앞에서부터 4칸 띄우기
format함수를 이용할 때에는 반드시 :를 써야한다
< strip() >: 문자열에 포함된 특정 문자를 지울 때 사용한다.
strip("지우고자하는 문자(열)") : 문자열에 양쪽에 있는 한 칸 이상의 연속된 특정 문자를 지운다.
lstrip("지우고자하는 문자(열)") : 문자열 중 가장 오른쪽에 있는 한 칸 이상의 연속된 특정 문자를 지운다.
rstrip("지우고자하는 문자(열)") : 문자열 중 가장 오른쪽에 있는 한 칸 이상의 연속된 특정 문자를 지운다.
()안에 아무것도 없을 경우 공백을 뜻하므로 공백을 삭제하게 된다.
a=" hi "
a.lstrip() #'hi '
a.rstrip() #' hi'
a.strip() #'hi'
하나의 문자가 아닌 여러 개의 특정 문자를 지정하여 삭제하고 싶은 경우
=> 그냥 괄호() 안에 그 특정한 문자를 추가해주면 됨 but, ',' 쉼표 사용하지 않고 그냥 옆에 바로 추가할 것
text = "......Hello World,,,,,,,,"
text.strip("."",") # 'Hello World'
text = "ababHello Worldabca"
text.strip("a""b""c") # 'Hello World'
*strip()을 사용하며 주의할 점*
text = "dog.jpeg"
text.strip(".jpeg") # 'do'
위 예시를 보면, 문자열 뒤쪽의 .jpeg만 삭제하고자 의도하였으나 이 경우, 문자열에 맨 끝에 이어져 있는 ".", "j", "p", "e", "g"를 모두 삭제해버리고 만다. => .앞에 g도 이어져있어서 같이 삭제되는 대참사 발생..
==> 따라서 이를 방지해주기 위해서는 제거하고 싶은 문자열의 연결을 강제로 분리시켜 주어야 한다.
text = "dog_a.jpeg"
text.strip(".jpeg") # 'dog_a'
<translate()> : 여러 개의 문자열을 한 번에 치환하거나 삭제할 때 사용한다.
translate 메소드는 str.maketrans 함수와 함께 사용한다.
text ="translate、allows・us・to・delete・multiple・letters。"
table = text.maketrans({
'、': ' ', #왼쪽은 치환하고 싶은 문자, 오른쪽은 새로운 문자
'。': '.', #왼쪽은 치환하고 싶은 문자, 오른쪽은 새로운 문자
'・': ' ', #왼쪽은 치환하고 싶은 문자, 오른쪽은 새로운 문자
})
print(text) # 'translate、allows・us・to・delete・multiple・letters。'
print(text.translate(table)) # 'translate allows us to delete multiple letters.'
<re.sub()>: 여러 개의 문자열을 한 번에 치환하거나 삭제할 때 사용한다.
import re #맨 처음에는 re 모듈을 import한다.
re.sub(치환하고 싶은 문자열(정규표현), 새로운 문자열(정규표현), 대상변수 ,[치환횟수])
import re
text = "abc123def456ghi"
new_text = re.sub(r"[a-z]", "", text) # text 문자열 안의 모든 알파벳을 삭제
print(new_text) # '123456'
new_text = re.sub(r'[1-9]', "", text) # text 문자열 안의 모든 숫자를 삭제
print(new_text) # 'abcdefghi'
<split()>: 문자열에서 특정 구분자를 기준으로 나눌 때 사용한다.
주로 한 줄에 걸쳐 여러 개를 입력받을 때 split을 사용함으로써, 각각의 입력값을 분리시킨다.
a=input().split()
print(a)
()안에 아무것도 없을 경우 공백(스페이스, 탭, 엔터 등)을 기준으로 문자열을 나누어 줌
<join>: 문자열 삽입
문자열에 특정한 것을 삽입한다.
#abcd문자열의 각각의 문자 사이에 ','를 삽입
",".join('abcd') #'a,b,c,d'
"삽입하고자하는 것".join(문자열)
조인은 리스트와 튜플을 모두 문자열로 만드는데 활용될 수 있다.
ㅣ=['a','b','c']
''.join(l) #'abc'
+)문자열의 위치를 알려주는 함수 => find, index
a.find(찾고자하는 문자) : 만약 존재하지 않는다면, -1 반환
a.index(찾고자하는 문자) : 만약 존재하지 않는다면, 오류 발생