○ 문자열은 홑따옴표, 겹따옴표, 3개의 홑따옴표를 사용해서 표현한다.
문자열(보통 string이라고 부른다)은 문자(character 라고 부른다)들의 리스트이다. 키보드에서 1개 단추를 누를 때 발생하는 정보가 1개의 문자 데이터라고 보면 되고, 이러한 문자 여러개가 따옴표(' ')로 묶여서 표현된다. 홑따옴표를 기본으로 겹따옴표, 홑따옴표 3개를 사용해도 된다. 일단 이 3가지 방식이 동작하는것을 먼저 확인해 보자.
따옴표 3가지 방식 중에 가장 기본적인 방식은 홑따옴표를 사용하는 것이다. 홑따옴표를 사용하기 어려운 곳에 겹따옴표 또는 3개의 홑따옴표를 사용한다고 생각하면 좋겠다.
우선 겹따옴표는 표현하려고 하는 문자열 내에 아포스트로피( ' )가 사용되는 경우이다. 문장에서 인용문을 표현하거나 영어에서 I am 을 I'm 으로 표시할 때 사용하는 그 아포스트로피 문자가 사용되는 경우에는 그 아포스트로피가 닫는 홑따옴표로 작용하기 때문에 문자열을 나타내는데 홑따옴표를 사용할 수 가 없다. 그럴 경우에 겹따옴표를 사용한다. 아래의 사용예를 보자
홑따옴표는 여러줄의 문자열을 표현할 수 없다. 여러개의 줄(Line)로 만들어진 문자열을 표현할 때에는 3개의 홑따옴표를 사용한다. 아래의 사용예를 보자.
○ 문자열은 한번 선언되면 수정할 수 없다 (immutable 하다)
문자열은 문자들의 튜플(tuple) 로 생각하면 된다. 그래서 실제로 문자열을 구성하는 각 문자는 인덱싱(indexing)을 통해 접근할 수 있고, 문자열의 일부분에 대해 슬라이싱(slicing) 할 수 있다.
문자열은 mutable 하지 못하다. 즉, 한번 선언된 문자열 데이터는 수정할 수 없다. 예를 들어, 아래와 같이 'Hello'라고 정의해야 할 데이터를 'Kello'라고 잘못 선언해서, 첫번째 문자 값을 'K' 대신에 'H'로 바꿀려고 한 In[47]의 시도는 허용되지 않는다. 단지 In[49]에서와 같이 re-assignment 할 수 있을 뿐이다.
○ 문자열의 기본 함수들
문자열 데이터가 가지는 기본 함수들을 살펴보면 아래의 그림과 같다. capitalize( )를 비롯해 수없이 많은 함수들이 있다.
공부하는 입장에서 한번씩 살펴보는 것도 의미가 있겠다 싶어 (지금 당장에야 공부는 안되겠지만, 다음에 필요할 때에 떠올릴 수 있을 정도로) 예제 중심으로 정리해 보겠다.
우선 대소문자 변환과 관련된 함수들이 있다. capitalize( ), casefold( ), lower( ), swapcase( ), upper( ), title( ) 함수 등이다.
capitalize( ) 함수는, In[72]에서 보는 것 처럼, 문자열의 첫 글자를 대문자로 바꿔 주는 함수이다. 단지 한가지 유의할 것은 문자열은 immutable 하다는 사실이다. In[72]의 a.capitalize( )는 a 문자열 자체를 capitalize( ) 하는 것이 아니라, a를 capitalize( ) 하면 만들어진 문자열을 새로 만들어서 리턴해 주는 함수이다. 실제로 capitalize( ) 한 이후에 원래의 문자열을 살펴보면 바뀌지 않고 그대로인 것을 확인할 수 있다 (In[73]). 만약 capitalize 된 문자열이 필요하다면 In[74]와 같이 capitalize 되어 리턴되는 문자열 데이터를 새로운 변수에 저장해야 한다. 다른 모든 함수들도 이와 같다.
casefold( ) 함수는 2개의 문자열을 비교할 때에 사용할 수 있도록 대, 소문자 구별을 없앤 형태를 되돌려 준다 (대, 소문자를 모두 소문자로 변환해 준다). In[63]에서 처럼 문자열 비교시 대, 소문자가 구별되는 것에 주의할 것.
lower( ) 함수는 문자열내의 모든 글자를 소문자로 바꿔주는 함수이고, upper( )는 반대로 모든 글자를 대문자로 바꿔주는 함수이다. title( ) 함수는 문자열 내에 포함된 모든 단어의 첫 글자를 대문자로 바꾸어 주는 함수이다. 아래의 사용 예를 참고하기 바란다.
다음을 문자열을 정렬하는 것과 연관된 함수들이 있다. center( ), ljust( ), rjust( ) 함수가 그것이다. 우선 ceter( ) 함수에 대한 설명을 보면 해당 글자열을 width 인자 만큼의 길이의 중앙에 둔다는 것이며, 디폴트로 비워져 있는 부분은 스페이스(space)로 채운다는 뜻이다.
실제로 사용예를 보면 다음과 같다. In[85]에서 a.center(20)은 a 문자열을 20칸의 중간에 위치시켜서 새로운 문자열을 만드는 함수이다. 빈칸을 특정 문자로 채울 수 있다. 위의 함수 설명에서 fillchar 인자가 그것이다. 따로 밝히지 않으면 디폴트로 space (빈칸) 이 사용되지만, In[86] 처럼 빈칸을 채울 문자('*')를 선택할 수 있다.
이와 연계하여 ljust( )는 문자열을 왼쪽 정렬, rjust( ) 는 문자열을 오른쪽 정렬해 주는 함수이다. 사용예를 보면 아래와 같다.
그 다음으로 문자열의 함수들을 살펴보면, is~로 시작하는 함수들이 꽤 많은 것을 확인할 수 있다. is~ 함수들은 문자열이 "~인지?"를 묻는 함수들로서 그러하면 True 값이 그렇지 않으면 False 값이 리턴된다. 예를 들어 어떤 문자열 a 에 대해 a.isnumeric( ) 라고 하면, "a numeric 인지?" 를 묻는 함수로서 해당 문자열이 숫자 심볼의 조합으로 만들어진 경우에는 True 값이, 그렇지 않은 경우에는 False 가 리턴된다. 아래 예를 보자.
그 외에 문자열이 알파벳인지를 묻는 isalpha( ), 숫자 심볼로 만들어진 문자열인지를 묻는 isdigit( ), 10진수 숫자인지를 묻는 isdecimal( ), 알파벳이거나 숫자인지를 묻는 isalnum( ), 아스키 코드체계 상의 문자로 구성된 문자열인지를 묻는 isascii( ), 소문자인지를 묻는 islower( ), 대문자인지를 묻는 isupper( ), 스페이스 문자인지를 묻는 isspace( ), 타이틀인지를 묻는 istitle( ) 함수 등이 있다. 여기서, 타이틀이란 첫글자가 대문자인 단어를 말한다.
문자열을 다루는 입장에서 특별히 의미있는 함수는 split( )과 format( ) 함수이다. 아래는 split( )함수의 설명이다.
문자열의 split( ) 함수는 해당 문자열을 특별한 문자열(sep 인자)를 기준으로 쪼개는 함수이다. 문자열을 다루다 보면 하나의 문자열을 구문 해석하여 여러개의 문자열로 쪼개어 분석하는 경우가 많은데, 그럴 경우에 유용하게 사용할 수 있는 함수이다. split( ) 함수는 하나의 문자열을 여러개의 문자열 (나누어진 문자열을 보통 token 이라 부르기도 한다) 로 쪼개어 리스트로 넘겨준다. 아래의 코드는 'http://www.nsu.ac.kr/ie/course/python' 이라는 문자열을 '//' 문자열을 중심으로 나누는 예를 보여주고 있다. In[127]에서 해당 문자열을 '//'를 기준으로 나누어 'http', 'www.nsu.ac.kr/ie/course/python' 등 2개의 문자열로 나누어 리스트로 돌려주고 있다.
문자열의 format( ) 함수를 이용해서, 문자열의 출력을 조금 더 세련되게 만들 수 있다. 우리가 여러 사람들에게 비슷한 안내문을 보내는 경우를 상상해 보자. 예를 들어 기본 메시지는 다음과 같다고 하자.
"( )에게, 완연한 봄 날씨가 되었습니다. 당신이 있는 ( )도 화창한 날씨겠지요?"
이 문자열의 첫번째 빈칸에 "길동", 두번째 빈칸에 "율도국"을 넣으면
"길동에게, 완연한 봄 날씨가 되었습니다. 당신이 있는 율도국도 화창한 날씨겠지요?"
이 문자열의 첫번째 칸에 "나의 달링", 두번재 빈칸에 "서울"을 넣으면
"나의 달링에게, 완연한 봄 날씨가 되었습니다. 당신이 있는 서울도 화창한 날씨겠지요?"
문자열을 이런 형태로 동작하게 만드는 것이 format( ) 함수이다. 다음의 코드를 참고하기 바란다. 어떤 문자열로 채워지는 공간은 대괄호({ })로 표시하고 빈칸이 여러개인 경우 각각을 번호로 표시한다. 번호는 0부터 시작한다. format( )함수의 인자에 각 빈칸을 채울 문자열이 순서에 맞게 들어가도록 한다.
○ 이스케이프 문자 (Escape Character)
문자열에서 백슬래시(\)는 이스케이프 문자 (escape character)라고 해서 좀 특별한 의미가 있다. 백슬래시는 바로 다음에 연결되는 문자와 함께 어떤 특정한 기능을 수행하는 문자를 말한다. 예를 들어 \t 라는 이스케이프 문자는 탭을 출력하고 \n 이라는 이스케이프 문자는 줄바꿈을 한다. 아래의 사용예를 보자. 문자열에서 \t 는 \t 문자 그대로 출력되지 않고, 탭으로 출력되고 있음을 확인해 보자. \n 도 마찬가지이다. 문자열에 이스케이프 문자가 포함된 경우, 그 로직에 맞게 일종의 전처리(pre-processing) 과정이 이루어지고 나서 화면에 출력된다. 예를 들어, \t 이 포함된 문자열은 화면에 출력하기 전에 \t 대신에 탭이 들어가는 일종의 전처리 과정이 먼저 이루어진다는 뜻이다.
이처럼, 문자열에서 백슬래시는 이스케이프 문자를 나타내는 용도로 사용되기 때문에 문자로서 백슬래시를 나타낼 때에는 백슬래시를 2개 붙여 \\로 나타낸다. 아래의 사용예를 참고하기 바란다.
이스케이프 문자를 텍스트 그대로 (즉, 문자열 전처리 과정 없이) 문자열을 있는 그대로 사용하고자 하는 경우에는 문자열이 시작하는 따옴표 앞에 raw data 라는 의미로 r 을 덧붙인다. 이렇게 r 을 덧붙인 문자열 내에 사용된 이스케이프 문자들은 텍스트 그대로 사용된다.
문자열 내에 포함되는 홑따옴표나 겹따옴표도 이스케이프 문자를 사용해서 표현할 수 있다. 문자열 내에 홑따옴표를 표시하고 싶은 경우에는 \' (백슬래시+홑따옴표), 겹따옴표를 표시하고 싶은 경우에는 \" (백슬래시+겹따옴표)로 나타내면 된다는 의미이다. 아래의 사용예를 참고하자.
이 외에 몇가지가 더 있는데, 당분간은 사용할 일이 없으니 이 정도만 기억하고 넘어가도록 하자.
'파이썬 (python)' 카테고리의 다른 글
[python 16] 함수 - Part 2 : 인자 (0) | 2020.03.25 |
---|---|
[python 15] 함수 - Part 1 : 개요 (0) | 2020.03.25 |
[python 13] 데이터 구조 - 튜플, 딕셔너리 (1) | 2020.03.16 |
[python 12] 리스트(list) 데이터 구조 (0) | 2020.03.16 |
[python 11] 변수에 대한 리뷰 (0) | 2020.02.25 |