텍스트는 프로그램이 처리해야 할 가장 일반적인 데이터 유형 가운데 하나입니다. 특히 파이선은 문자열을 다루는 많은 기능을 가지고 있습니다. 문자열 처리에 아주 최적화된 언어이기 때문입니다. 이미 + 연산자로 두 개의 문자열 값을 연결하는 방법을 알고 있지만 그보다 훨씬 더 많은 일을 할 수 있습니다. 문자열 값에서 부분 문자열을 추출할 수도 있고, 빈칸을 넣거나 뺄 수도 있으며, 글자를 소문자 또는 대문자로 변환하거나 문자열이 올바르게 지정되었는지 확인하는 문자로 변환, 추가하거나 빈칸을 제거할 수 있습니다.
파이선 문자열 다루기. 리얼파이선 9
텍스트를 복사하거나 붙여 넣기 위해 클립보드를 사용하는 파이선 코드를 만들 수도 있습니다. 여기서 문자열을 다루는 모든 기능을 익히시기 바랍니다. 함수는 반드시 기능을 실습하시기 바랍니다. 기본 문자열 응용 방법을 배우고 두 개의 프로젝트를 진행해볼 것인데, 첫 번째는 간단한 암호 관리자이며 두 번째는 몇 가지 텍스트를 서식화하는 지루한 잡일을 자동화하는 프로그램을 살펴볼 것입니다.
문자열 리터럴 String Literals
이전에 문자열에 대해 배웠던 것을 잠깐 복습하는 의미로 아래 코드를 실습합니다.
숫자와는 별개로, 파이썬은 문자열도 다룰 수 있는데 여러 가지 방법으로 표현됩니다. 작은따옴표('...') 나 큰따옴표("...")로 둘러쌀 수 있는데 모두 같은 결과를 나타냅니다.
>>> spam = "That is Alice's cat."
이스케이프 문자
다른 언어들과는 달리, \n 과 같은 특수 문자들은 작은따옴표('...')와 큰따옴표("...")에서 같은 의미가 있습니다. 둘 간의 유일한 차이는 작은따옴표 안에서 " 를 \(역 슬래쉬)를 사용할 필요가 없지만 아래 경우처럼 작은따옴표 안에서 ' 를 사용할 경우 \ 이스케이프 문자를 사용해야 합니다.
>>> spam = 'Say hi to Bob\'s mother.'
이스케이프 코드란?
문자열 예제에서 여러 줄의 문장을 처리할 때 백슬래시 문자와 소문자 n을 조합한 \n 이스케이프 코드를 사용했다. 이스케이프 코드란 프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 "문자 조합"이다. 주로 출력물을 보기 좋게 정렬하는 용도로 사용한다. 몇 가지 이스케이프 코드를 정리하면 다음과 같다.
코드 설명
| \n | 문자열 안에서 줄을 바꿀 때 사용 |
| \t | 문자열 사이에 탭 간격을 줄 때 사용 |
| \\ | 문자 \를 그대로 표현할 때 사용 |
| \' | 작은따옴표(')를 그대로 표현할 때 사용 |
| \" | 큰따옴표(")를 그대로 표현할 때 사용 |
| \r | 캐리지 리턴(줄 바꿈 문자, 현재 커서를 가장 앞으로 이동) |
| \f | 폼 피드(줄 바꿈 문자, 현재 커서를 다음 줄로 이동) |
| \a | 벨 소리(출력할 때 PC 스피커에서 '삑' 소리가 난다) |
| \b | 백 스페이스 |
| \000 | 널 문자 |
이 중에서 활용 빈도가 높은 것은 \n, \t, \\, \', \"이다. 나머지는 프로그램에서 잘 사용하지 않는다.
적적한 문자열 사용 예를 참고하세요.
>>> 'spam eggs' # single quotes
'spam eggs'
>>> 'doesn\'t' # use \' to escape the single quote...
"doesn't"
>>> "doesn't" # ...or use double quotes instead
"doesn't"
>>> '"Yes," they said.'
'"Yes," they said.'
>>> "\"Yes,\" they said."
'"Yes," they said.'
>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'
대화형 인터프리터에서, 출력 문자열은 따옴표로 둘러싸여 있고, 특수 문자들은 역 슬래시로 이스케이핑 됩니다. 때로 입력한 것과 달라 보여도 (따옴표의 종류가 바뀔 수 있다), 두 문자열은 동등합니다. 문자열이 작은따옴표를 포함하고 큰따옴표를 포함하지 않으면 큰따옴표가 사용되고, 그 외의 경우는 작은따옴표가 사용됩니다. print() 함수는 따옴표를 생략하고, 이스케이핑된 특수 문자를 출력해서 더 읽기 쉬운 출력을 만들어냅니다:
>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'
>>> print('"Isn\'t," they said.')
"Isn't," they said.
>>> s = 'First line.\nSecond line.' # \n means newline
>>> s # without print(), \n is included in the output
'First line.\nSecond line.'
>>> print(s) # with print(), \n produces a new line
First line.
Second line.
\ 뒤에 나오는 문자가 특수 문자로 취급되게 하고 싶지 않다면, 첫 따옴표 앞에 r 을 붙여서 날 문자열 (raw string) 을 만들 수 있습니다:
>>> print('C:\some\name') # here \n means newline!
C:\some
ame
>>> print(r'C:\some\name') # note the r before the quote
C:\some\name
문자열 리터럴은 여러 줄로 확장될 수 있습니다. 한 가지 방법은 삼중 따옴표를 사용하는 것입니다: """...""" 또는 '''...'''. 줄 넘김 문자는 자동으로 문자열에 포함됩니다. 하지만 줄 끝에 \ 를 붙여 이를 방지할 수도 있습니다. 다음 예:
print("""\
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
""")
는 이런 결과를 출력합니다 (첫 번째 개행 문자가 포함되지 않는 것에 주목하세요):
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
문자열은 + 연산자로 이어 붙이고, * 연산자로 반복시킬 수 있습니다:
>>> # 3 times 'un', followed by 'ium'
>>> 3 * 'un' + 'ium'
'unununium'
두 개 이상의 문자열 리터럴 (즉, 따옴표로 둘러싸인 것들) 가 연속해서 나타나면 자동으로 이어 붙여집니다.
>>> 'Py' 'thon'
'Python'
이 기능은 긴 문자열을 쪼개고자 할 때 특별히 쓸모 있습니다:
>>> text = ('Put several strings within parentheses '
... 'to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'
이것은 오직 두 개의 리터럴에만 적용될 뿐 변수나 표현식에는 해당하지 않습니다:
>>> prefix = 'Py'
>>> prefix 'thon' # can't concatenate a variable and a string literal
File "<stdin>", line 1
prefix 'thon'
^
SyntaxError: invalid syntax
>>> ('un' * 3) 'ium'
File "<stdin>", line 1
('un' * 3) 'ium'
^
SyntaxError: invalid syntax
변수들끼리 혹은 변수와 문자열 리터럴을 이어 붙이려면 + 를 사용해야 합니다
>>> prefix + 'thon'
'Python'
문자열은 인덱스 (서브 스크립트) 될 수 있습니다. 첫 번째 문자가 인덱스 0에 대응됩니다. 문자를 위한 별도의 형은 없습니다; 단순히 길이가 1인 문자열입니다:
>>> word = 'Python'
>>> word[0] # character in position 0
'P'
>>> word[5] # character in position 5
'n'
인덱스는 음수가 될 수도 있는데, 끝에서부터 셉니다:
>>> word[-1] # last character
'n'
>>> word[-2] # second-last character
'o'
>>> word[-6]
'P'
-0은 0과 같으므로, 음의 인덱스는 -1에서 시작한다는 것에 주목하세요.
인덱싱에 더해 슬라이싱(slicing) 도 지원됩니다. 인덱싱이 개별 문자를 얻는 데 사용되는 반면, 슬라이싱 은 부분 문자열(substring)을 얻는 데 사용됩니다:
>>> word[0:2] # characters from position 0 (included) to 2 (excluded)
'Py'
>>> word[2:5] # characters from position 2 (included) to 5 (excluded)
'tho'
슬라이스 인덱스는 편리한 기본값을 갖고 있습니다; 첫 번째 인덱스를 생략하면 기본값 0 이 사용되고, 두 번째 인덱스가 생략되면 기본값으로 슬라이싱 되는 문자열의 길이가 사용됩니다.
>>> word[:2] # character from the beginning to position 2 (excluded)
'Py'
>>> word[4:] # characters from position 4 (included) to the end
'on'
>>> word[-2:] # characters from the second-last (included) to the end
'on'
시작 위치의 문자는 항상 포함되는 반면, 종료 위치의 문자는 항상 포함되지 않는 것에 주의하세요. 이 때문에 s[:i] + s[i:] 는 항상 s 와 같아집니다
>>> word[:2] + word[2:]
'Python'
>>> word[:4] + word[4:]
'Python'
슬라이스가 동작하는 방법을 기억하는 한 가지 방법은 인덱스가 문자들 사이의 위치를 가리킨다고 생각하는 것입니다. 첫 번째 문자의 왼쪽 경계가 0입니다. n 개의 문자들로 구성된 문자열의 오른쪽 끝 경계는 인덱스 n 이 됩니다, 예를 들어:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
첫 번째 숫자 행은 인덱스 0…6 의 위치를 보여주고; 두 번째 행은 대응하는 음의 인덱스들을 보여줍니다. i 에서 j 범위의 슬라이스는 i 와 j 로 번호 붙여진 경계 사이의 문자들로 구성됩니다.
음이 아닌 인덱스들의 경우, 두 인덱스 모두 범위 내에 있다면 슬라이스의 길이는 인덱스 간의 차입니다. 예를 들어 word[1:3] 의 길이는 2입니다.
너무 큰 값을 인덱스로 사용하는 것은 에러입니다:
>>> word[42] # the word only has 6 characters
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
하지만, 범위를 벗어나는 슬라이스 인덱스는 슬라이싱할 때 부드럽게 처리됩니다:
>>> word[4:42]
'on'
>>> word[42:]
''
파이썬 문자열은 변경할 수 없다 — 불변이라고 합니다. 그래서 문자열의 인덱스로 참조한 위치에 대입하려고 하면 에러를 일으킵니다:
>>> word[0] = 'J'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> word[2:] = 'py'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
다른 문자열이 필요하면, 새로 만들어야 합니다.
>>> 'J' + word[1:]
'Jython'
>>> word[:2] + 'py'
'Pypy'
내장 함수 len() 은 문자열의 길이를 돌려줍니다:
>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34
참고

'개발자 > 파이썬 Python' 카테고리의 다른 글
| 파이선 자료구조 List 사용법. 리얼 파이선 13 (0) | 2022.02.22 |
|---|---|
| 파이선 입력과 출력. 리얼파이선 12 (0) | 2022.02.17 |
| 파이선 서식 지정자와 출력 포맷팅. 리얼파이선 11 (0) | 2022.02.15 |
| 파이선 문자열 메소드 Method, 리얼파이선 10 (0) | 2022.02.10 |
| 파이선 함수. 리얼파이선 8 (0) | 2022.02.03 |
| 파이선 제어문 리얼파이선 7 (0) | 2022.01.28 |
| 파이선 연산 리얼파이선 6 (0) | 2022.01.26 |
| 파이선 변수. 리얼파이선 5 (0) | 2022.01.26 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩