Python/Hello Python

07. 문자열 다루기1

nahhhh03 2020. 4. 19. 19:12

데이터 타입 변환 : str()

str() 함수를 사용해서 데이터 타입을 문자열로 변환할 수 있다.

문자열이 아닌 객체를 print()로 호출할 때, 파이썬은 내부적으로 str() 함수를 사용.



이스케이프 문자

파이썬은 문자열 안의 일부 문자의 의미를 다르게 해석하여 특정 효과를 줄 수 있다. 이렇게 하지 않으면

이들 효과를 문자열 안에서 표현하기 힘들 것이다. 문자 앞에 백슬래시(\) 기호를 붙임으로써 특별한 의미를

줄 수 있다. 가장 일반적인 이스케이프 시퀀스는 줄바꿈을 의미하는 \n 다. 이것으로 한 줄의 문자열을 

여러 줄의 문자열로 만들 수 있다.

# 테스트와 출력 결과


텍스트의 공백에 사용되는 이스케이프 시퀀스 \t를 살펴본다(t는 tab을 의미)

# 테스트와 출력 결과


문자열에서 \'혹은 \"을 사용하여 단일 또는 이중 인용 부호를 표현할 수 있다.


백슬래시를 입력하고 싶은 경우에는 백슬래시를 두 번 입력하면 된다.



결합 : +

다음과 같이 + 연산자를 사용해서 리터럴 문자열 또는 문자열 변수를 결합할 수 있고, 또한 

(문자열 변수가 아닌)리터럴 문자열을 다음과 같이 차례로 결합할 수 있다.


파이썬은 문자열을 결합할 때 공백을 자동으로 붙이지 않는다. 그래서 위 예제처럼 명시적으로 공백을 넣었다.

print()는 각 인자 사이에 공백을 붙인다. 그리고 마지막에는 줄바꿈 문자를 붙인다.

# +로 그냥 출력과 print()를 사용했을 때 출력



복제하기 : *

* 연산자를 이용하여 문자열을 복제할 수 있다. 대화식 인터프리터에서 다음과 같이 입력하여 살펴본다.


문자 추출 : [ ]

문자열에서 한 문자를 얻기 위해서는 문자열 이름 뒤에 대괄호([ ])와  오프셋을 지정한다. 가장 왼쪽의 오프셋은

0이고, 그 다음은 1,2,3...이런 식으로 진행된다. 가장 오른쪽의 오프셋은 -1이다. 그래서 문자열의 수를

셀 필요가 없다. 마찬가지로 그 다음의 오프셋은 -2,-3...이런 식으로 진행된다.

오프셋을 문자열의 길이 혹은 이상(오프셋은 0에서 문자열 길이 -1까지다)으로 지정하는 경우에는 

다음과 같은 예외 발생.


문자열은 불변하기 때문에 특정 인덱스에 문자를 삽입하거나 변경할 수 없다.

ex) 'Henny' -> 'Penny' 변경 시도 시


대신 replace() 와 같은 문자열 함수와 슬라이스(slice)와 같은 문자열 함수 사용



슬라이스 : [start:end:step]

슬라이스를 사용해 한 문자열에서 문자열 일부(substring) 를 추출할 수 있다. 대괄호를 사용하여 시작(start) 오프셋,

끝(end) 오프셋, 그리고 옵션으로 스텝(step)을 명시하여 슬라이스를 정의한다. 이들 중 일부는 생략할 수 있다.

슬라이스는 오프셋의 start와 end -1사이의 문자를 포함한다.

- [:] 처음부터 끝까지 전체 시퀀스 추출

- [start:] start오프셋부터 끝까지 시퀀스를 추출

- [:end] 처음부터(end -1 )오프셋까지 시퀀스 추출

- [start:end] start 오프셋부터 (end -1) 오프셋까지 시퀀스를 추출

- [ start:end:step] step만큼 문자를 건너뛰면서, start오프셋부터 (end -1)오프셋 시퀀스까지 추출


이전에 본 것처럼 시작 지점에서 오른쪽으로 가는 오프셋은 0,1,2...이고, 끝에서 왼쪽으로 가는 오프셋은 -1,-2-3..이다.

만약 시작 오프셋을 명시하지 않으면 슬라이스는 0(시작)을 사용하고 끝 오프셋을 명시하지 않으면 마지막 문자를 사용한다.


ex) 단순히 [:]만 사용(전체 문자열을 지정. [0:]과도 같다.)


ex) 오프셋 20부터 문자열 끝까지 추출


ex) 오프셋 10부터 문자열 끝까지 추출



ex) 오프셋 12부터 14까지 추출(파이썬은 마지막 오프셋은 포함하지 않는다. 그러므로 14가 아닌 15를 지정해야 한다.)

ex) 마지막 세 문자 추출


ex) 오프셋 18부터 마지막 4번째 문자까지 추출. 시작 오프셋에 -3을 지정하면 x가 되지만, 끝 오프셋에 -3을 지정하면

      -4번째 문자인 w가 된다.)


ex) 끝에서 여섯 번째 문자부터 끝에서 세 번째 문자까지 추출


1보다 큰 스텝을 원한다면 다음 예제처럼 두 번째 콜론 이후에 숫자를 명시하면 된다.

ex) 처음부터 끝까지 7스텝씩 건너 뛰면서 문자 추출


ex) 4번쨰부터 19번째까지 스텝 3스텝씩 건너뛰면서 문자 추출


ex) 19번째부터 끝까지 4스텝씩 건너뛰면서 문자 추출


다시 한번 강조하면 끝 오프셋은 실제 오프셋 +1 이다.

편리한 파이썬의 슬라이스는 백스텝을 할 수 있다.


ex) 끝에서부터 시작 지점까지 빠짐없이 문자 추출


슬라이스는 단일 인덱스 조회라기보다는 까다로운 오프셋 조건을 광범위하게 조회하는 것에 더 가깝다.

다음 예제에서는 첫 번째 문자열 이전의 슬라이스 오프셋은 0으로 간주하고, 마지막의 오프셋은

-1로 간주한다.

ex) 끝에서 50번째 문자열부터 문자열 끝까지 추출


ex) 끝에서 51번째부터 끝에서 51번째 문자열 추출


ex) 처음부터 69번째까지 문자 추출




문자열 길이 : len()

파이썬의 내장 함수인 len() 함수는 문자열의 길이를 센다.




문자열 나누기 : split()

문자열 함수는 string.function(arguments) 형태로 입력하여 사용한다. 즉, 문자열(string)이름을 입력하고 .을

입력한 후 함수(function)이름을 입력한다. 그리고 그 함수에 필요한 인자(argument)도 입력한다.

어떤 구분자를 기준으로 하나의 문자열을 작은 문자열들의 리스트로 나누기 위해서는 문자열 내장 함수 split()을

사용한다.


todos문자열과 단일 구분자의 인자로 ','와 함께 split() 함수를 사용했다. 만약 구분자를 지정하지 않으면 

split()는 문자열에 등장하는 공백 문자(줄바꿈, 스페이스, 탭)를 사용한다.





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

join() 함수는 spilt() 함수와 반대다. join() 함수는 문자열 리스트를 하나의 문자열로 결합한다. 먼저 결합한 문자열을

지정한 다음에 문자열 리스트를 결합한다. join()함수는 문자열 리스트를 string.join(list) 형태로 결합한다.

그러므로 lines 리스트를 각각 줄바꿈하여 하나의 문자열로 결합하기 위해서는 '\n'.join(lines)를 입력한다.


ex) 리스트를 콤마와 스페이스로 구분하여 하나의 문자열로 결합