문자열 처리
이전 시간에 데이터 형을 배울 때 문자열은 하나 또는 여러 개의 문자로 구성되며, 인덱스를 이용하여 문자열의 요소를 추출할 수 있다는 것을 배웠습니다. 이번 시간에는 문자열 반복, 문자열 연결, 문자열 길이를 구하는 방법 등에 대해 알아보고 또한 포맷에 맞춰 문자열을 재배치하는 문자열 포맷팅에 대해서 알아보겠습니다.
문자열 반복
숫자에 사용되는 곱셈 기호인 *가 문자열에 사용하게 되면, 이것은 문자열을 반복시킵니다.
hello = '안녕' * 5
print(hello)
실행 결과 안녕안녕안녕안녕안녕을 확인할 수 있습니다.
- 1행 '안녕' * 5는 '안녕'을 다섯 번 반복시킨 값을 hello에 저장합니다.
- 3행 실행 결과와 같이 문자열 hello의 값인 '안녕안녕안녕안녕안녕'을 출력합니다.
문자열 길이 구하기
문자열의 길이를 구할 때는 len() 함수를 사용합니다. 다음 예제를 통해 len() 함수를 이용하여 문자열의 길이를 구하는 방법에 대해 알아보겠습니다.
a = '쥐 구멍에 볕 들 날 있다.'
b = len(a)
print(b)
실행 결과 15를 확인할 수 있습니다.
- 1행 문자열 a에 '쥐 구멍에 볕 들 날 있다.'를 저장합니다.
- 3행 len(a)는 문자열 a의 개수인 15를 얻는 데 사용합니다.
※ 공백도 하나의 문자로 인식한다는 것에 유의하시기 바랍니다.
len() 함수는 문자열의 개수를 구할때 사용합니다.
문자열 연결하기
산술 연산자에서 덧셈 기호(+)는 숫자를 더하는 데 사용하였습니다. 그런데 문자열에서 사용할 때 + 기호는 두 개의 문자열을 서로 연결하는 데 사용됩니다. 다음 예제를 통해 알아보도록 하겠습니다.
name = '김혜수'
greet = name + '님 안녕하세요!'
print(greet)
실행 결과 김혜수님 안녕하세요! 를 확인할 수 있습니다.
- 2행 문자열 name과 문자열 '님 안녕하세요!'를 서로 연결하여 하나의 문자열로 만들어 greet에 저장합니다.
문자열을 + 연산자로 연결할 때에 사용되는 데이터의 형은 모두 문자열만 사용하여야 합니다. 다른 형의 데이터(숫자, 리스트, 딕셔너리 등)가 올 경우에는 오류가 발생하게 됩니다.
문자열 연결 시 오류가 발생하는 경우의 예를 살펴보겠습니다.
kor = 80
result = '국어 점수:' + kor + '점'
print(result)
실행 결과 오류가 발생하는 것을 확인하실 수 있습니다.
- 2행 + 연산자를 이용하여 문자열 '영어 점수:', 변수 kor, 문자열 '점'을 하나의 문자열로 연결하였습니다. 그러나 위 Tip에서 설명한 것과 같이 문자열을 연결할 때는 연결되는 대상이 모두 문자열이어야 합니다. 하지만 변수 kor은 정수형 숫자이기 때문에 실행했을 때 오류가 발생하게 되는 것입니다.
문자열 포맷팅
문자열 포맷팅은 특정 포맷에 맞춰 문자열을 재배치하는 것입니다. 일반적으로 문자열 포맷팅에는 % 연산자를 이용하는 방법과 str.format를 이용하는 방법 두 가지가 있습니다.
% 연산자를 이용한 포맷팅
1. %s를 이용한 포맷팅 예제
name = '자연인'
a = '나는 %s 이다.' % name
print(a)
실행결과 나는 자연인이다.를 확인할 수 있습니다.
- 1행 변수 name에 문자열 '자연인'을 저장합니다.
- 2행 포맷팅 기호 %s 대신에 name의 값이 대입됩니다. %s에서 s는 'string' 즉 문자열을 나타냅니다.
※ %s는 문자열의 변수와 데이터에 사용합니다.
2. %d를 이용한 포맷팅 예제
age = 35
a = '나이는 %d살 입니다.' % age
print(a)
실행 결과 나이는 35살 입니다. 를 확인할 수 있습니다.
- 1행 변수 age에 정수형 숫자 35를 저장합니다.
- 2행 %d 대신에 age의 값 35를 대입합니다. %d에서 d는 'digit' 즉 숫자를 의미합니다.
※ %d는 정수형 변수(또는 데이터)에 사용합니다.
3. %2d를 이용한 포맷팅 예제
숫자 앞을 0으로 채워서 문자열을 포맷팅 하는 방법입니다.
year = 2024
month = 6
day = 7
a = '%d-%02d-%02d' % (year, month, day)
print(a)
실행 결과 2024-06-07을 확인할 수 있습니다.
- 1~3행 변수 year, month, day에 각각 정수형 숫자 2024.6.7을 저장합니다.
- 5행 %2d는 전체 자릿수가 두 자리고, 자리가 남을 때는 0으로 채우게 됩니다. 그리고 '%d-%02d-%02d'에서 사용된 %d, %02d, %02에는 각각의 변수 year, month, day값이 대입됩니다.
4. %.2f를 이용한 포맷팅 예제
%f를 이용하여 실수형 숫자를 포맷팅 하는 방법입니다.
height - 178.3
a = '키는 %.2f입니다.' % height
print(a)
실행 결과 키는 178.30입니다. 를 확인할 수 있습니다.
- 1행 변수 height에 실수형 숫자 178.3을 저장합니다.
- 2행 여기에 사용된 %.2f에서 f는 'floating point' 즉 '부동 소수점'인 실수형 데이터를 의미합니다. 그리고 .2는 소수점 둘째 자리(셋째 자리에서 반올림)까지 표시합니다.
%를 이용한 문자열 포맷팅에 사용되는 포맷 기호들을 정리하면 아래 데이터표와 같습니다.
%를 이용한 포맷팅의 포맷 기호
포맷 기호 | 사용되는 데이터 형 |
%d | 정수형 숫자 |
%s | 문자열 |
%f | 실수형 숫자 |
%05d | 정수형 숫자 다섯 자리, 남는 부분을 0으로 채움. |
%.2f | 소수점 둘째 자리의 실수형 숫자 |
format() 이용한 문자열 포맷팅
앞에서 배운 % 연산자와 더불어 문자열을 포맷팅 하는 방법은 format() 매서드(Method)를 이용하는 것입니다. 지금 단계에서 메서드는 함수와 거의 동일한 것입니다. 즉 어떤 기능을 수행하기 위해 사용하는 것이라고 이해하시면 되겠습니다.
name = '박보영'
age = 32
eyesighr = 1.2
a = '이름: {}'.format(name)
b = '나이: {}세'.format(age)
c = '시력: {}'.format(eyesighr)
print(a)
print(b)
print(c)
실행 결과 이름: 박보영, 나이: 32세, 시력: 1.2를 확인할 수 있습니다.
- 5행 중괄호({})의 자리에 문자열 name의 값이 대입됩니다. 문자열 a는 '이름: 박보영'의 값을 가지게 됩니다.
- 6행 5행과 마찬가지로 중괄호({})의 자리에 정수형 변수 age값이 대입됩니다.
- 7행 같은 방식으로 중괄호({})의 자리에 실수형 변수 eyesight의 값이 대입됩니다.
format()을 이용하면 변수의 형에 상관없이 문자열을 포맷팅 할 수 있습니다. 그러나 코드가 길어지는 단점이 있습니다. % 연산자를 활용하면 더 축약하여 표현할 수 있지만 해당 데이터형에 맞는 기호를 알아두어야 합니다. 두 가지 방법 중 자신이 편하다고 생각하는 방식을 사용하시면 되겠습니다.
알아두기
메서드란?
메서드(Method)는 객체지향(Object-Oriented)에서 함수와 동일한 역할을 수행합니다. 객체 내에서 함수들이 사용되는 이 함수들을 우리는 '메서드'라고 부릅니다. 메서드를 조금 더 이해하기 위해 위에서 사용한 str.format() 형태를 조금 살펴보겠습니다.
str.format(변수_데이터, 변수_데이터)
여기 str이 문자열 객체(Object)입니다. 객체 메서드를 사용하기 위해서는 객체이름 옆에 점(.)을 붙인 다음 해당 메서드를 사용합니다. 문자열 객체를 다루기 위해 파이썬에서 준비한 메서드에는 다음과 같은 것들이 있습니다.
문자열 매소드
기호 | 설명 |
str.format() | 문자열 포맷팅하기 |
str.count() | 문자열 개수 세기 |
str.find() | 문자열 내부의 특정 문자열 찾기 |
str.upper() | 문자열 대문자로 바꾸기 |
str.lower() | 문자열 소문자로 바꾸기 |
str.replace() | 문자열 내부의 특정 문자열 바꾸기 |
str.split() | 문자열 분리하기 |
str.isspace() | 문자열에 공백이 있는지 체크하기 |
이번 시간에는 문자열 처리에 대해 알아보았습니다. 다음 시간에는 모니터 화면에 데이터를 출력하는 방법과 입력하는 방법에 대해 알아보도록 하겠습니다.