문자열이란?
문자들이 열거 되어있는 것으로 파이썬은 문자 하나도 문자열로 취급한다.
- 문자열은 Sequence 자료형이다.
- 문자열은 수정불가능한 객체이다.
- 컴퓨터는 문자도 숫자(이진수)로 변경해서 저장 또는 처리해야한다.
- 이진수로 변경하려면 어떠한 규칙이 있어야하는데 그 표준규칙을 인코딩이라고 한다.
- 사람이 이해할 수 있게 문자로 원복하는 것을 디코딩이라고 한다.
- ASCII (영어 키보드에 할당되는 모든 키), EUC-KR, UTF-8(세계적인 표준) 등이 있다.
큰 따옴표, 작은 따옴표 그리고 무적의 Doc String
작은 따옴표 안에 큰 따옴표를 넣는 법과 큰 따옴표 안에 작은 따옴표를 넣는 법은 동일하다.
두 개가 서로 겹치지 않게 사용하면 된다.
예시는 다음과 같다.
text = "나는 말했다.'안녕하세요'라고..." # 큰 따옴표 안에 작은 따옴표
text = '나는 말했다."안녕하세요"라고...' # 작은 따옴표 안에 큰 따옴표
위와 같은 경우는 줄을 바꾸면 오류가 발생한다. 하지만 Doc String을 쓰면 줄을 바꿔도 상관이 없다.
Doc String은 따옴표 3개를 이어서 쓰면 되는 것으로 무조건 문자열을 적은대로 표현할 수 있다.
그래서 이것은 개발자들 간에 주석으로도 사용이 된다.
"""문자열"""
'''문자열'''
이 외에도 \을 쓰면 문장의 시작과 끝으로 인식하는 것이 아닌 특수문자로 인식하여 따옴표를 나타낼 수 있다.
그리고 \n을 적으면 다음 줄로 이동하는 것, \t를 쓰면 4칸띄어쓰기 되는 것이 있다.
문자열 연산
문자열도 연산이 가능하다.
간단한 예시로는 다음과 같다.
text1 = "Hello"
text2 = "World"
print(text1+text2) # 더하기 기호는 문자열과 문자열을 이어 붙인다.
=> HelloWorld
text1*10 # 곱하면 문자열을 반복한다.
=> 'HelloHelloHelloHelloHelloHelloHelloHelloHelloHello'
'H' in text1
'Hello' == text1
=> 둘 다 True가 나온다
문자열의 인덱싱 및 슬라이싱
이번 문제는 간단한 문제를 예시로 들고, 넘어가겠다.
- 슬라이싱과 더하기 연산자를 이용하여 다음과 같은 출력이 나오도록 하시오.
==> 01011112222
phone = "010-1111-2222"
phone[:3] + phone[4:8] + phone[9:]
=> '01011112222'
String Formatting이란?
문자열 내의 특정한 값을 변수로부터 동적으로 받아 포함시켜 문자열을 생성시키는 것이다.
다음과 같은 예를 들 수 있다.
text = f"제 이름은 {name}입니다. 나이는 {age}입니다."
print(text)
f를 앞에 붙이고, {변수명}을 넣고 싶은 자리에 넣는 구조이다.
다음과 같은 9단을 보면 이해하기 쉬워질 것이다.
- 다음과 같이 9단을 보기 좋게 출력해보시오.
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81
-------------정답-------------
print(f"{num} X 1 = {num*1}")
print(f"{num} X 2 = {num*2}")
print(f"{num} X 3 = {num*3}")
print(f"{num} X 4 = {num*4}")
print(f"{num} X 5 = {num*5}")
print(f"{num} X 6 = {num*6}")
print(f"{num} X 7 = {num*7}")
print(f"{num} X 8 = {num*8}")
print(f"{num} X 9 = {num*9}")
------------------------------
문자열 메소드란?
파이썬에는 문자열을 다루기 위한 다양한 메소드가 있다.
대/소문자화 하기 (upper( ), lower( )), 문자열 치환하기 (replace( )), 문자열 분리하기 (split( ))등이 있다.
- 대 / 소문자화 하기 (upper( ), lower( ))
text = "Hello Python"
text.upper() # 모든 문자를 대문자로 변경
=> 'HELLO PYTHON'
text = "Hello Python" # 모든 문자를 소문자로 변경
text.lower()
=> 'hello python'
- 치환하기 (replace( ))
A라는 문자열을 B라는 문자열로 바꾸는 것이다.
text.replace("P","C") # 첫번째 인자에 매칭되는 모든 문자열을 두번째 인자의 문자열로 변경한다.
# 문자열은 수정불가능한 객체이므로 변경이 안된다.
- 문자열 분리하기 (split( ))
특정 구분자를 이용해서 문자열을 분리하여 리스트로 반환하는 것
text = '#8시간#하루종일#파이썬#하고있음'
result = text.split("#") # 기준값을 줄 경우 다음과 같이 비어있는 문자도 리스트에 포함된다.
result
=> ['', '8시간', '하루종일', '파이썬', '하고있음']
result[1:] # 슬라이싱으로 비어있는 문자를 날린다.
=> ['8시간', '하루종일', '파이썬', '하고있음']
- 문자열의 좌/우 공백 제거 (strip( ))
text = " 오늘 하루 너무 행복하다. \n\n\n\n\n"
print(text.strip()) # rstrip,lstrip 사용하여 좌,우만 공백제거 가능
=> 오늘 하루 너무 행복하다.
- 문자열 합치기 (join( ))
split의 반대 개념으로 특정 문자열을 기준으로 리스트에 들어있는 문자열들을 합쳐주는 역할
문제 list => ['오늘', '하루', '너무', '행복하다']
"#".join(result) # 인자값으로 리스트 같은 자료형을 넣어주면 된다.
=> '#오늘#하루#너무#행복하다'
- 특정 문자열로 시작하는지와 끝나는지에 대한 여부를 반환 (startswith( ), endswith( ))
text = "이제는 날이 점점 더워지는 것 같아요."
text.startswith("이제는")
=>True
str_list = ["오늘은 몇 일 입니까?", "파이썬 쉽다!", "내일 만나요...", "주말에 복습하실꺼죠?"]
print(str_list[0].endswith("?"))
print(str_list[1].endswith("?"))
print(str_list[2].endswith("?"))
print(str_list[3].endswith("?"))
=>True
False
False
True
- 특정 문자를 세기 (count( ))
text = "이제는 날이 점점 더워지는 것 같아요."
text.count("이")
=> 2
- 문자열의 앞을 지정한 길이로 0으로 채우기 (zfill( ))
a = "1" # 파일들을 담아두고, 정렬할 때 유용하게 쓰인다.
a.zfill(5)
=> '00001'
zfill( ) 메소드는 파일들을 정렬할 때 유용하게 쓰이는데 예시로는 다음과 같다.
img_files = ["img_10.jpg","img_1.jpg","img_3.jpg","img_8.jpg"] # 정렬이 안됨!
sorted(img_files)
=> ['img_1.jpg', 'img_10.jpg', 'img_3.jpg', 'img_8.jpg']
--------------------------------------------------------------------------------------
img_file = "img_1.jpg" # lst 기준으로 나눔
lst = img_file.split("_")
lst
=> ['img', '1.jpg']
--------------------------------------------------------------------------------------
lst[1] = lst[1].zfill(6) # 10의 자리를 기준으로 정렬하기 위해 6을 넣음
lst[1]
=> '01.jpg'
--------------------------------------------------------------------------------------
"_".join(lst) # 다시 "_"를 붙여줌!
=> 'img_01.jpg'
처음에 파일명을 정렬하면 정렬이 이상하게 된다.
왜냐하면 10과 3을 비교하면 앞의 자리만을 보고 비교하기 때문에 우리가 원하는 것처럼 정렬이 되지 않는다.
결국 정렬하기 위해선 파일명들에서 _(언더바)를 기준으로 나누어 주고,
두번째 배열에 있는 '1.jpg'를 '01.jpg'로 바꿔준다.
이 후 _(언더바)를 붙여서 다시 파일명을 정렬해주면 파일 정리가 끝나게 된다..!
'AI 공부 > 파이썬' 카테고리의 다른 글
파이썬 (제어문 = 조건문, 반복문....) - 2 (0) | 2022.07.26 |
---|---|
파이썬 (제어문 = 조건문, 반복문....) - 1 (0) | 2022.07.25 |
파이썬 (연산자를 이용한 리스트) (0) | 2022.07.22 |
[ 배열 ], ( 튜플 ), { 딕셔너리 }의 차이점과 사용법 (0) | 2022.07.22 |
파이썬 (함수와 메소드) (0) | 2022.07.21 |
댓글