❰문자열의 활용❱
-문자열 연산 및 다양한 함수에 대해 배워봅시다.
▶문자열 연산이란?
문자열 연산이란 문자열을 결합하거나 반복하는 등의 작업을 수행하는 것입니다. 파이썬에서는 더하기(+) 연산자를 사용하여 문자열을 연결하고, 곱하기(*) 연산자를 사용하여 문자열을 반복할 수 있습니다. 또한, 특정 위치의 문자를 가져오는 인덱싱, 문자열의 길이를 구하는 len() 함수, 부분 문자열을 추출하는 슬라이싱 등 다양한 연산 및 함수를 사용할 수 있습니다.
➀문자열 더해서 연결하기
덧셈(+) 연산자를 활용하여 문자열을 연결해보겠습니다.
간단한 문구를 합치거나, 변수에 있는 문자열을 다른 문자열과 합치거나, 여러조각의 정보를 모아 하나의 문장으로 만들 때 사용합니다.
str1과 str2라는 변수에 각 "안녕"과 "하세요"라는 문자를 저장합니다.
string_addition이라는 변수를 만들어 str1과 str2를 +연산자를 활용하여 저장하여줍니다.(str1 + str2)
print문을 사용하여 string_addition을 출력하여 주시면
안녕하세요라는 결과 값을 확인 하실 수 있습니다.
결과 값을 보셨다 싶이 문자열에서 + 연산자는 두 개이상의 문자열을 하나로 합하여 새로운 문자열을 만듭니다.
➁문자열 곱하기
곱셈(*)연산자를 활용하여 문자열을 반복해 보겠습니다.
문자열로 구분선을 만들거나, 특정 문자를 반복해서 시각적인 효과를 줄 때, 초기 문자열을 여러번 반복해야 할 때 사용합니다.
str3라는 변수에 "야호!"라는 문자를 저장합니다.
stringmutiplication이라는 변수를 만들어 str3에 *연산자를 활용하여 반복 횟수를 지정해 주고 저장하여 줍니다(str3 * 5)
print문을 활용하여 문자열을 반복해 줍니다
보시는 결과 와 같이 "야호!"라는 문자가 5번 반복 됩니다.
문자열에서 * 연산자는 문자열을 지정된 횟수만큼 반복하여 새로운 문자열을 만듭니다.
➂문자열 길이 구하기
len함수를 활용하여 문자열의 길이를 구해보겠습니다.
사용자 입력길이가 너무 짧거나 길 때 경고 메시지를 띄울 때, 문자열의 특정 부분을 처리하기 전 길이를 확인 해야 할 때,
비밀번호의 최소 길이를 검사할때 사용합니다
str4라는 변수에 "12345 678910"이라는 숫자를 문자로 저장합니다.
print문을 활용해 출력을 하면 되며 이때 print함수에 len()함수를 사용해주시면 되겠습니다(print(len(str4))
결과값을 보면12가 나오는데 '11이 결과로 나와야하지 않나'라는 의문을 가지실 수 있습니다. 길이에는 공백도 포함 되기 때문에 12라는 결과가 나오는것입니다.
➃문자열 인덱싱
문자열 인덱싱(indxing)은 문자열에서 원하는 특정 글자를 찾아 꺼내는 방법입니다.
각 글자가 자기만의 '고유한 번호표'를 가지고 있다고 생각하면 쉽습니다. 그리고 이 번호표가 '인덱스 (index)' 입니다.
인덱스는 0번부터 시작하며 글자마다 순서대로 번호가 매겨집니다.
이러한, 인덱스를 사용하여 원하는 글자를 꺼내는 작업을 인덱싱이라고 하는겁니다.
쉽게 설명하면, 아래의 예제 처럼 '안녕하세요'라는 문자가 있습니다.
각 글자에 따라 번호가 매겨지는데 '안'은 '0', '녕'은 '1' , '하'는 '2' , '세'는 '3' , '요'는 '4'라는 번호가 글자마다 매겨집니다.
이게 '인덱스'이며 그리고 여기서 인덱스를 이용해 '세'라는 특정 글자를 꺼내는게 '인덱싱'입니다.
주민등록번호같은 곳에서 성별을 나타내는 숫자 하나만 뽑아내야 할 경우, 이메일 주소에서 첫 글자만 가져와서 이니셜을 만들 때,
문자열의 특정 위치에 있는 글자가 어떤 규칙에 맞는지 검사할 때 사용합니다
안 | 녕 | 하 | 세 | 요 |
0 | 1 | 2 | 3 | 4 |
예제로 반갑습니다! 라는 문장이 있습니다.해당 문장을 각 인덱스 별로 추출 해보겠습니다.
str1이라는 변수에 '반갑습니다!'라는 문자열을 저장하여 줍니다.
그 후 print문을 활용하여 str1의 문자열을 출력 하여 주시면 됩니다.
print(str1[0]) ~ print(str1[5])번까지 출력하여 주시면 각 인덱스 별 문자가 출력되는 걸 확인하실수 있으십니다.
반대로 뒤에서 부터 글자를 꺼내고 싶다면 음수(-)를 사용하여 글자를 추출해주시면 되겠습니다.
안 | 녕 | 하 | 세 | 요 |
-5 | -4 | -3 | -2 | -1 |
✿ [ ] 대괄호의 사용이유?
대괄호 [ ]의 목적은 데이터 컬렉션(문자열, 리스트, 튜플, 딕셔너리 등)에서 특정 요소 또는 요소들의 범위에 '접근'하고 '선택'하는 데 사용되는 문법 기호입니다. 인덱스 번호를 쓰면 인덱싱/슬라이싱이고, 키 이름을 쓰면 딕셔너리에서 값을 가져오는 것에 있습니다.
이처럼 대괄호 []는 파이썬에서 데이터를 다룰 때 매우 다양하고 중요한 역할을 합니다.
쉽게 설명하면 , 데이터를 '선택'하고 '접근'하는 것이 대괄호의 목적입니다.
➄문자열 슬라이싱
문자열 슬라이싱(Slicing)은 문자열에서 원하는 범위의 부분 문자열을 잘라내어 새로운 문자열을 만드는 방법입니다. 인덱싱이 글자 하나만 추출하는 것이라면, 슬라이싱은 여러 글자를 연결해서 가져오는 것 입니다.날짜 문자열 "2025-xx-xx"에서 연도 "2025"만 뽑아낼 때, 파일 이름 "document.txt"에서 확장자 ".txt"만 분리할 때, 긴 문장에서 특정 단락이나 구문을 추출할 때, 문자열을 뒤집거나 특정 간격으로 건너뛰면서 가져올 때 사용합니다.
슬라이싱은 기본적인 규칙이 있습니다.
[시작 인덱스 : 끝 인덱스]의 형태로 사용 되며
시작 인덱스는 잘라내기 시작할 글자의 인덱스 입니다. ([ : 끝 인덱스] 시작 인덱스를 제외 시 자동으로 0번 인덱스부터 시작)
끝 인덱스는 잘라내기를 끝낼 글자의 바로 다음 인덱스 입니다 ([시작 인덱스 : ] 끝 인덱스를 제외 시 문자열 끝까지 포함)
슬라이싱도 마찬가지로 음수를 이용해 문자를 추출 할 수 있습니다.
아래 예제를 보면서 직접 실습하여 봅시다.
마지막으로 슬라이싱에는 [시작 : 끝]외에도 [단계]를 나타낼 수 도 있습니다.
규칙은 [시작 : 끝 : 단계]가 되겠습니다. 여기서 단계(step)은 몇 칸씩 건너뛰면서 글자를 가져올지 정하며 기본값은 1입니다.
여기서도 마찬가지로 음수를 사용할 수 있으며 음수를 사용하면 문자열이 뒤집어 진다고 보시면 됩니다.
예제를 보면서 직접 실습하여 보겠습니다.
➅문자열 포매팅
문자열 포매팅(Formatting)은 말 그대로 문자열의 형식(format)을 정하고 꾸미는 방법입니다.
쉽게 말해, 변수에 있는 값이나 계산 결과를 문자열 안에 넣어서 하나의 완성된 문장을 만드는 기술입니다.
일생 생활을 하면서 " 회원님의 이름은 [철수]이고, 주문금액은 [1,000]원 입니다." 같은 문장을 쓸 때 [ ]대괄호 안에 실제 값을 채워 넣는 것과 같습니다.
"안녕하세요" 같은 단순함을 넘어 "안녕하세요,[철수]님 " 같은 하나의 완성된 문자열을 만들거나,소숫점 자릿수를 맞추거나 특정칸에 맞춰 정렬하는 등 형식을 맞추거나, 코드를 읽는 사람에게 문자열과 변수가 어떻게 결합되는지 한눈에 쉽게 파악 할 수 있도록 가독성을 높여주는 역할을 합니다.
문자열 포매팅을 하는 방법은 여러 방법이 있지만 크게 세가지 방법을 주로 사용합니다
첫번째 방식으로는, C언어 등 다른 프로그래밍 언어에서 부터 사용한 오래된 스타일의 방식인 %연산자입니다.
산술 연산자로 사용할때는 나머지를 나타내는 연산자로 사용되지만, 문자열 연산자에서는 포매팅을 하는 연산자로 사용합니다
문자열 안에 %s, %d, %f 같은 타입별 자리표시자를 넣고, 문자열 뒤에 %를 쓰고 튜플 형태로 값을 넣어 줍니다.
이 방식은 과거에 많이 사용되고, 다른 언어와 유사점이 있어 익숙하게 사용하는 분들도 있다는 장점이 있지만,
각 변수의 타입을 미리 알고 자리표시자를 맞춰야 해서 오류가 발생하기 쉽고, 가독성이 가장 떨어지며 현대 파이썬에서는 거의 사용되지 않는다는 단점이 있습니다.
문자열 포맷 코드는 아래의 표를 참고 해주시면 됩니다.
코드 | 설명 |
%s | 문자열(string) |
%c | 문자 1개 추출(character) |
%d | 정수(integer) |
%f | 부동소수(floating-point) // %자리수f로 소숫점 자리수 지정가능(예 :%.2f는 소수점 둘째자리까지 표시) |
%o | 8진수(octal) |
%x | 16진수(hexadecimal) |
%% | %문자열로 출력(literal) |
아래 예제를 보고 실습하여 봅시다.
✿튜플이란?
튜플(tuple)은 파이썬에서 여러개의 값을 하나로 묶어서 저장할 때 사용하는 데이터 형태 중 하나입니다.
일상생활을 비유로 들면 여러 물건을 구매 후 한 봉투나 박스에 담듯이, 튜플은 여러 종류의 데이터를 하나의 묶음으로 취급할 수 있게 해줍니다. 또한, 불변성(immutable)이 있어 한 번 튜플을 만들면 그안에 있는 값들을 수정할 수 없게 됩니다.
하지만, 지금 배우는 문자열 포매팅에서 튜플은 '값을 묶어서 전달하는 역할'을 한다고 생각하시면 되겠습니다.
튜플은 쉼표( , ) 값으로 구분하고, 보통 전체를 둥근 괄호()로 감싸서 표현합니다.
자세한 설명은 추후 정리하는 튜플 자료형에서 정리하겠습니다.
두번째 방식으로는, .format()메서드가 있습니다. 세번째 방식으로 배우게 될 f-string 이전의 표준 방식으로 사용되던 방식 입니다.
.format()메서드는 문자열을 구성하고 값을 지정된 형식에 맞게 포맷하거나 출력하는데 사용됩니다. 중괄호{ }를 사용하여 문자열안에 변수나 값들을 삽입하는 방식으로 동작합니다. 쉽게 말해, 문자열 안에 변수나 다른 값을 쏙쏙 집어넣고, 보기 좋게 꾸며주는 도구입니다. 편지를 예로 들면, "{ } 님, 안녕하세요! 편지를 쓴 날은 { }월 { } 일로 날씨는 {}입니다." 여기서 중괄호는 위 설명도 있지만 조금 더 쉽게 설명하면, 나중에 채워 넣을 빈칸 입니다. 이름을 넣고, 날짜를 넣고, 날씨를 넣자! 라고 표시 해둔 자리입니다.
이 예제를 실습을 통해 직접 실행 해봅시다.
❅주의 할 점
.format()메서드에서 { }(빈칸)가 4개인데, 채워줄 값을 3개만 입력하게 되면 아래 오류가 발생 하게 되는데
File "c:\Users\경로 폴더들 \프로젝트 폴더 \프로젝트.py", line 11, in <module> letter = letter_tamplate.format(name, month, day)
" 채워줄 빈칸이 남는데 값이 부족하네?" 하고 오류를 발생시킵니다.
그래서 .format를 사용할 때는 문자열 안의{}개수와.format() 괄호 안의 변수/값 개수를 항상 맞춰야 합니다
마지막 방식으로는 현재 가장 많이 사용되고 있는 f-string입니다. formatted string literal 을 뜻합니다.
f-string은 Python 3.6버전 부터 도입된 문자열 포매팅 방식입니다. 현재 가장 많이 추천하는 이유는 가독성과 간결함이 있어서 일상생활에서 말하 듯 문자열 안에 변수나 계산식을 바로 넣어 사용할 수 있습니다.
실습을 통하여 설명 드리겠습니다.
위 예제를 보시는 것과 같이 문자열 안에 변수 이름이나 표현식이 {} 중괄호와 함께 바로 들어가기 때문에, 어떤 값이 어디에 들어갈지 코드를 한눈에 파악하기 쉽고, 문자열의 흐름을 방해하지 않기 때문에 가독성이 뛰어나며, + 연산자처럼 일일이 문자열을 쪼개거나, .format()처럼 메서드를 따로 호출할 필요 없이 f만 붙이면 바로 사용할 수 있어 간결함이 있으며, 변수뿐만 아니라 함수 호출, 간단한 연산, 메서드 호출, 연산자 등 유효한 모든 파이썬 표현식을 {} 안에 직접 넣을을 수 있어 표현이 다양해지며, 숫자를 문자열로 변환할 때처럼 str() 함수를 명시적으로 호출할 필요가 없어 f-string이 자동으로 적절한 타입으로 변환해주며, 다른 문자열 포매팅 방식(특히 % 연산자)보다 내부적으로 더 효율적으로 구현되어 있어 일반적으로 성능이 더 빠르며,정렬, 자릿수, 천 단위 구분 기호 등 문자열 출력 형식을 세밀하게 제어하는 다양한 옵션을 : 뒤에 붙여 사용할 수 있습니다.
포매팅의 마지막으로 글자를 정렬하는 방법에 대하여 실습을 통해 배워 보겠습니다.
위 예제는 왼쪽정렬(:<)입니다.
지정한 너비 안에서 텍스트를 왼쪽에 붙여 정렬하며 :<10 값을 넣을 공간을 10칸 확보하고, 그 안에서 값을 왼쪽에 붙여 정렬하라는 의미예요. 나머지 공간은 공백으로 채우라는 의미입니다. :<5은 5칸을 확보하라는 의미입니다.즉, "앨리스"라는 글자를 포함해서 10칸을 확보하고 그 후 왼쪽 7칸을 공백으로 채워라 입니다. %연산자는왼쪽 정렬을 하고 싶을 때는 숫자 앞에 - (마이너스) 기호를 붙여줍니다.
위 예제는 오른쪽 정렬(:>)입니다.
설명은 왼쪽 정렬과 차이는 없으며, :>10에 대한 설명은 왼쪽 정렬과 >방향이 반대가 되었다라는 걸 제외하면 바뀐게 없습니다.
하지만 ,d 라는 지정자가 나왔는데 숫자에 천 단위 콤마를 붙여주는 형식 지정자입니다. % 연산자는 따로 지정하지 않으면 기본적으로 오른쪽 정렬을 하며 전체 너비를 지정하면, 남은 공간을 왼쪽에 공백으로 채웁니다.
위 예제는 가운데 정렬(^)입니다.
지정한 너비 안에서 텍스트를 가운데에 오도록 정렬하며 :^30 값을 넣을 공간을 30칸 확보하고, 그 안에서 값을 가운데로 정렬하라는 의미이며 "환영합니다!" 라는 문자를 포함하여 24칸을 확보하게 됩니다.
위 예제는 채움문자이며 문자열을 특정 너비로 정렬했을 때 남는 공간을 공백 대신 다른 문자로 채우고 싶을 때 사용합니다.
채움 문자는 정렬 기호 (<, >, ^) 바로 앞에 위치하며, 원하는 채움 문자를 지정해주면 됩니다. 단, 채움문자는 단 하나의 문자만 사용할 수 있으며 채움 문자를 사용하려면 반드시 정렬 방향 (<, >, ^)과 너비도 함께 지정해야 합니다. 채움 문자만 단독으로 사용할 수는 없습니다. %의 채움문자는 제한적이며 주로 숫자 앞에 0을 붙여서 남는 공간을 0으로 채우는 방식을 사용하며, 기본적으로 공백이 기본 채움문자입니다.
➆특정 문자 입력확인하기
in 연산자는 문자열 안에서 특정 문자나 부분 문자열이 존재하는지 확인할 때 사용됩니다. 이 연산자는 True 또는 False를 반환하는 논리 연산자입니다. 그 반대인 not in연산자도 존재하는데 not in을 사용하면 특정 문자열이 포함되어 있지 않은지 확인할 수 있습니다.
위 예제를 참고하여 주시면 되겠습니다.
▶문자열 함수
해당 문자열 활용의 마지막인 문자열 함수에 대해 배워 보겠습니다.
문자열 자료형은 자체적으로 함수를 가지고 있습니다. 이걸 '문자열 내장함수'라고 하며 문자열 변수 이름 뒤에 '.'을 붙인 후 함수의 이름을 써주면 됩니다.
➀ 특정 문자열 찾기
변수이름.find(찾을_문자열): 특정 문자열이 처음 나타나는 인덱스(위치)를 반환합니다. 찾지 못하면 -1을 반환합니다.
변수이름.index(찾을_문자열): find()와 유사하게 처음 나타나는 인덱스를 반환하지만, 찾지 못하면 ValueError 오류를 발생시킵니다.
변수이름.count(찾을_문자열): 특정 문자열이 나타나는 횟수를 반환합니다.
아래 예제를 보시면 문자열에는 'Python'이 0번 인덱스와 27번 인덱스에 두 번 나타나는데 결과는 0입니다. 이는 find()와 index() 함수의 본질적인 역할이 문자열 내에서 '첫 번째로' 일치하는 항목의 위치만을 찾아 반환하기 때문입니다. 비록 문자열 내에 동일한 문자나 단어가 여러 번 존재하더라도, 이 함수들은 항상 가장 먼저 발견되는 하나의 위치만 알려주고 작업을 종료합니다.
만약 문자열 내의 모든 일치하는 위치를 찾거나 더 복잡한 패턴을 검색해야 한다면, 이는 find()나 index()의 기본 기능을 넘어서는 고급 문자열 처리 기법(예: 반복문과 슬라이싱 조합, 또는 정규 표현식)을 사용해야 합니다. 입문 과정에서는 이 함수들이 '첫 번째' 항목을 찾는다는 점을 이해하는 것이 중요하며 아직은 배울 과정이 아니기 때문에 차후 설명 하겠습니다.
➁문자열 변경 및 교체
변수이름.replace(바꿀_대상_문자열, 새로운_문자열): 특정 부분 문자열을 다른 문자열로 모두 교체한 새로운 문자열을 반환합니다. 원본 문자열은 변경되지 않습니다.
➂문자열 분리 및 합치기
변수이름.split(구분_기준_문자열): 특정 구분 기준을 사용하여 문자열을 리스트(List)로 분리합니다. 구분 기준을 생략하면 공백을 기준으로 분리합니다.
변수이름_문자열.join(문자열_리스트): 리스트에 있는 문자열들을 특정 구분_문자열로 연결하여 하나의 문자열로 만듭니다.
쉽게 말하면, split함수는 문자열을 쪼개서 리스트([ ])로 반환하여 결과값이 ['apple' , 'banana', 'cherry']가 나오는것이고 split(',')는 콤마(,)기준으로 나눈다는 뜻입니다. 빈 공백으로 남겨두면 공백기준으로 나눠줍니다.
join은 리스트([]) 안의 문자열을 특정 구분자를 넣어 하나의 문자열로 합친다고 생각하시면 됩니다. 마찬가리고" ".join의 " "은 구분 자이고 공백이기 때문에 python is awesome이라는 문자열이 나오는 것입니다. 공백안에 콤마(,)를 삽입하면 python,is,awesome이라는 문자열이 나오게 됩니다.
split() | 문자열을 리스트로 변경 | 쪼개는 방식으로 기억하면 쉬움 |
join() | 리스트를 문자열로 변경 | 합치는 방식으로 기억하면 쉬움 |
➃문자열 양쪽 공백 제거
변수이름.strip(): 문자열 양쪽 끝의 공백(줄 바꿈, 탭 포함)을 제거합니다.
변수이름.lstrip(): 문자열 왼쪽 끝의 공백을 제거합니다.
변수이름.rstrip(): 문자열 오른쪽 끝의 공백을 제거합니다.
⑤문자열 대소문자 변환
변수이름 .upper(): 모든 문자를 대문자로 변환합니다.
변수이름 .lower(): 모든 문자를 소문자로 변환합니다.
변수이름 .capitalize(): 문자열의 첫 글자만 대문자로, 나머지는 소문자로 변환합니다.
변수이름 .title(): 각 단어의 첫 글자만 대문자로 변환합니다.
➅문자열 구성확인(True/False반환)
변수이름 . startswith(접두사): 문자열이 특정 접두사로 시작하면 True, 아니면 False를 반환합니다.
변수이름 . endswith(접미사): 문자열이 특정 접미사로 끝나면 True, 아니면 False를 반환합니다.
변수이름 . isalpha(): 문자열의 모든 문자가 알파벳이면 True, 아니면 False.
변수이름 . isdigit(): 문자열의 모든 문자가 숫자이면 True, 아니면 False.
변수이름 . isalnum(): 문자열의 모든 문자가 알파벳 또는 숫자이면 True, 아니면 False.
여기서 말하는 접두사, 접미사는 알고 있는 지식과 동일하게
접두사 : 어떤 문자열의 맨 앞에 붙는 부분, 접미사 어떤 문자열의 맨 뒤에 붙는 부분을 의미합니다
이것으로 문자열 활용에 대하여 마치겠습니다~
오늘 하루도 고생하셨습니다 ~😌
📘 참고:
《Do it! 점프 투 파이썬 (전면 개정 2판)》, 박응용 저, 이지스퍼블리싱, 2023
※ 본 글은 위 교재의 내용을 학습 및 정리 목적으로 요약/재구성한 글입니다.
'Python(파이썬)_점프 투 파이썬 > 파이썬 기초 문법' 카테고리의 다른 글
튜플 자료형 (4) | 2025.08.07 |
---|---|
리스트 자료형(List Datatype) (2) | 2025.08.06 |
파이썬 문자열 자료형(따옴표 및 이스케이프 활용) (2) | 2025.07.27 |
파이썬의 문자열 자료형(정의, 특징) (2) | 2025.07.25 |
파이썬 숫자형을 활용한 연산자 (1) | 2025.07.24 |