파이썬 문자열 이해하기

파이썬 문자열 이해하기

문자열(String)

특정 분야에 상관 없이 많은 개발자들은 매일 문자열을 다룬다. 예를 들어, 웹 개발자들은 웹 폼의 인풋으로 들어오는 텍스트를 다루고, 데이터 사이언티스트는 특정 분석을 수행하고 데이터를 추출하기 위해 텍스트를 가공한다. 파이썬에서는 이런 텍스트의 집합을 문자열(string)이라고 부른다.


문자열 자료형(String Data Type)

문자열은 가장 기본적인 파이썬 자료형(data type) 중 하나이다. 자료형이란 용어는 특정 값이 나타내는 데이터의 종류를 뜻한다. 이제 알아볼 문자열은 텍스트를 나타내기 위해 사용된다.

파이썬에서 문자열 자료형은 str이란 이름으로 축약되어 불려진다. 주어진 값의 자료형을 확인해보고 싶을 때는 type() 함수를 사용할 수 있다.

다음 예시를 확인해보자.

>>> type("Hello, world")
<class 'str'>

출력된 <class 'str'>이 값 "Hello, world"가 문자열 자료형의 인스턴스임을 나타낸다. 즉, "Hello, world"는 문자열이다.

type() 함수을 사용하면 함수에 할당된 값의 자료형까지도 확인 할 수도 있다.

>>> phrase = "Hello, world"
>>> type(phrase)
<class 'str'>
문자열에는 다음과 같이 세 가지 속성이 존재한다.
  1. 문자열은 문자를 포함한다. 즉, 개별 문자 또는 기호인 문자가 포함된다.
  2. 문자열은 길이를 가진다. 즉, 그 길이는 문자열에 포함된 문자의 수이다.
  3. 문자열의 문자는 순서대로 나타난다. 즉, 각 문자는 문자열 안에서 번호가 매겨진 위치를 가진다.

문자열 리터럴(String Literals)

지금까지 본 것처럼, 텍스트를 따옴표로 감싸주면 문자열을 생성할 수 있다.

string1 = 'Hello, world'
string2 = "1234"

큰따옴표나 작은따옴표, 둘 다 같은 타입만 사용한다면 문자열을 생성하기 위해 둘 중 아무거나 사용해도 상관이 없다.

이처럼 텍스트를 따옴표로 감싸 만든 문자열을 문자열 리터럴(string literal)이라고 부른다. 이름은 문자 그대로 문자열이 코드에 기록되었음을 나타낸다. 지금까지 사용된 모든 문자열 예제가 문자열 리터럴이다.

하지만 모든 문자열이 문자열 리터럴인 것은 아니다.
예를 들어, 유저의 인풋으로부터 입력된 문자는 프로그램 코드상 기록된 문자열이 아님으로 문자열 리터럴이라고 불릴 수 없다.

문자열을 감싸고 있는 따옴표는 구분자(delimiters)라고 불리는데, 왜냐하면 따옴표가 파이썬에게 문자열이 어디서부터 시작하고 끝나는지 말해주기 때문이다.

한 종류의 따옴표를 이미 문자열을 위해 사용하고, 만약 따옴표를 문자열 안에 사용해야하는 상황이 발생한다면, 다음과 같이 다른 종류의 따옴표를 사용하면 된다.

string3 = "We're #1!"
string4 = 'I said, "Put it over by the llama."'

파이썬이 첫 구분자를 읽고, 매칭하는 구분자를 발견하기 전까지는 첫 구분자 뒤에 오는 모든 문자를 문자열의 일부로 간주한다. 그래서 위와같이 큰따옴표 안에 작은따옴표를 사용할 수 있는 것이다. 물론 작은따옴표 안에 큰따옴표처럼 반대로도 사용이 가능하다.

만약, 위처럼 사용하지 않고 큰따옴표안에 큰따옴표를 사용해서 구분하려고 한다면 다음과 같은 에러를 마주하게 된다.

>>> text = "She said, "What time is it?""
File "<stdin>", line 1
text = "She said, "What time is it?""
					^
SyntaxError: invalid syntax

위와 같은 상황을 방지하기 위해, 또 많은 개발자들의 컨벤션을 따라서, 프로젝트 안에서 문자열을 사용할 때는 큰따옴표나 작은따옴표로 통일해서 사용하는 것이 좋다. 그랬을때, 프로젝트 안에서 일관성있는 문자열 사용을 할 수 있게 되고, 문자열 안에 다른 타입의 따옴표를 사용해주면 되기 때문에 에러를 방지할 수 있기 때문이다.


문자열의 길이 결정하기

문자열의 길이는 문자열 안의 공백을 포함한 모든 문자의 수를 뜻한다 예를 들어 문자열 "abc"는 3의 길이를 가지고, 문자열 "Don't Panic"은 11의 길이를 가진다.

문자열의 길이를 알아보기 위해선 파이썬의 내장 함수인 len()을 사용하면 된다.

>>> len("abc")
3

위에서 사용했던 타입 함수와 마찬가지로 len()함수로 변수에 할당된 문자열의 길이도 확인해볼 수 있다.

>>> letters = "abc"
>>> num_letters = len(letters)
>>> num_letters
3

멀티라인 문자열(Multiline Strings)

PEP 8 스타일 가이드에서는 각 줄의 코드가 공백을 포함해 79자가 넘어가지 않기를 권고한다. 이렇게 함으로써, 두 파일을 양쪽에 두고 편집하기가 쉽기 때문이다. 개발자 스타일마다, 아니면 프로젝트 마다 이 컨벤션을 따르지 않을 수도 있지만, 어떤 방법이라도 결정하고 프로젝트 안에서 온전히 그 컨벤션을 따르는 것이 중요하다.

79자를 훌쩍 넘어가는 긴 문자열을 다루는 방법에는 여러가지 방법이 있다. 그 중 한 방법은 문자열을 여러 줄로 나누고 맨 끝에 백슬래시(\)를 붙혀주는 것이다. 만약 , PEP 8 방식을 따르려면 백슬래시를 포함해서 79자가 넘지 않아야한다.

다음과 같이 문단을 백슬래시를 사용해 멀티라인 문자열로 만들 수 있다.

paragraph = "This planet has - or rather had - a problem, which was \
this: most of the people living on it were unhappy for pretty much \
of the time. Many solutions were suggested for this problem, but \
most of these were largely concerned with the movements of small \
green pieces of paper, which is odd because on the whole it wasn't \
the small green pieces of paper that were unhappy."

백슬래시를 사용함으로써 라인의 끝마다 따옴표로 닫아주지 않아도 된다. 백슬래시를 사용해 여러 줄로 나눈 멀티라인 문자열을 print() 함수를 사용해 출력하면 다음과 같이 한 줄로 출력된다.

>>> long_string = "This multiline string is \
displayed on one line"
>>> print(long_string)
This multiline string is displayed on one line

다음과 같이 백슬래시가 아닌 세 개의 따옴표(triple quotes)의 구분자 방식으로도 멀티라인 문자열을 생성할 수 있다.

paragraph = """This planet has - or rather had - a problem, which was
this: most of the people living on it were unhappy for pretty much
of the time. Many solutions were suggested for this problem, but
most of these were largely concerned with the movements of small
green pieces of paper, which is odd because on the whole it wasn't
the small green pieces of paper that were unhappy."""

세 개 따옴표로 묶은 문자열 방식은 공백을 보존한다. 즉, print(paragraph)를 실행했을 때 새로운 행을 포함해 마치 문자열 리터럴 안에 있는 것처럼 문자열을 여러 줄로 출력한다.

>>> print("""An example of a
... string that spans across multiple lines
... that also preserves whitespace.""")
An example of a
	string that spans across multiple lines
		that also preserves whitespace.
위와 같이 세 개의 따옴표를 사용한 문자열을 독스트링(docstring)이라고 부른다. 독스트링은 파이썬에서 특별한 목적을 가지는데, 예를 들어 코드의 목적을 설명할 때 사용하거나 특정 함수를 문서화 할 때 사용한다.

Reference