본문 바로가기
Python 기초

[Python] 문자열 다루기

by 내 코딩 2023. 3. 18.
반응형

문자열이란?

문자열은 문자들의 집합을 의미한다.

sentence1 = '나는 소년입니다.'
print(sentence1)

sentence2 = "파이썬은 쉬워요."
print(sentence2)

sentence3 = '''
나는 소년이고,
파이썬은 쉬워요.
'''

실행 결과만으로는 문자열인지 확인하기 어렵다.

type()을 사용해 문자열인지 확인할 수 있다.

print(type(sentence1))
print(type(sentence2))

>> <class 'str'>
>> <class 'str'>

>> <class 'str'>

 

원하는 만큼 문자열 자르기: 슬라이싱

파이썬에는 슬라이싱이라는 방법으로 원하는 만큼 데이터를 자를 수 있다.

슬라이싱을 사용하려면 먼저 인덱스를 알아야 한다.

여러 문자로 구성된 문자열의 n번째 문자(또는 데이터)라고 할 때, n번째가 바로 인덱스이다.

인덱스는 데이터를 저장한 변수명에 대괄호([])를 붙이고 그 안에 숫자를 넣어서 표시한다.

jumin = '990229-1234567'
print('성별 식별번호 : ' + jumin[7])

>> 성별 식별번호 : 1

코드에서 위치를 나타내는 인덱스는 1이 아닌 0부터 시작한다.

변수명[시작 인덱스:종료 인덱스]

jumin = '990229-1234567'
print('연 : ' + jumin[0:2])
print('월 : ' + jumin[2:4])
print('일 : ' + jumin[4:6])

>> 연 : 99
>> 월 : 02
>> 일 : 29

  • 변수명[:종료 인덱스] - 처음부터 종료 인덱스 직전까지 슬라이싱
  • 변수명[시작 인덱스:] - 시작 인덱스부터 끝까지 슬라이싱
  • 변수명[:] - 처음부터 끝까지 슬라이싱
print('생년월일 : ' + jumin[:6])
print('주민번호 뒷자리 : ' + jumin[7:])

>> 생년월일 : 990229
>> 주민번호 뒷자리 : 1234567

 

앞에서부터가 아니라 뒤에서부터 슬라이싱할 수도 있는데, 이 때는 음수 인덱스를 사용한다.

단, 양수 인덱스일 때는 0부터 시작하지만, 음수 인덱스일 때는 -1부터 시작한다.

print('주민번호 뒷자리(뒤에서부터) : ' + jumin[-7:])

>> 주민번호 뒷자리(뒤에서부터) : 1234567

 

함수로 문자열 처리하기

함수 의미
lower() 문자열을 소문자로 변환
upper() 문자열을 대문자로 변환
islower() 문자열이 소문자인지 확인
isupper() 문자열이 대문자인지 확인
replace() 문자열 바꾸기
index() 찾는 문자열의 인덱스(없으면 오류 발생)
find() 찾는 문자열의 인덱스(없으면 -1 반환)
count() 문자열이 나온 횟수
문자열(또는 변수).함수()
print(python.lower())
print(python.upper())
print(python[0].isupper())
print(python[1:3].islower())
print(python.replace('Python', 'Java'))

>> python is amazing
>> PYTHON IS AMAZING
>> True
>> True
>> Java is Amazing

 

find(찾는 문자, 시작 인덱스, 종료 인덱스)
index(찾는 문자, 시작 인덱스, 종료 인덱스)
python = 'Python is Amazing'
find = python.find('n')  # 처음으로 발견한 n의 인덱스
print(find)
find = python.find('n', find + 1)  # 인덱스 6 이후부터 찾아 처음 발견한 n의 인덱스
print(find)
find = python.find('Java')  # Java가 없으면 -1을 반환(출력)한 후 프로그램 계속 수행
print(find)

index = python.index('n')  # 처음 발견한 n의 인덱스
print(index)
index = python.index('n', index + 1)  # 인덱스 6 이후부터 찾아 처음 발견한 n의 인덱스
print(index)
index = python.index('n', 2, 6)  # 인덱스 2부터 6 직전까지 찾아 처음 발견한 n의 인덱스
print(index)
index = python.index("Java")  # Java가 없으면 오류가 발생하며 프로그램 종료
print(index)

>> 5
>> 15
>> -1
>> 5
>> 15
>> 5

>> ValueError: substring not found

문자열 포메팅

서식 지정자 사용하기

서식 지정자는 자료형을 표현하는 방법으로, % 뒤에 자료형을 나타내는 문자가 붙습니다.

서식 지정자 의미
%d 정수(decimal)
%f 실수(floating-point)
%c 문자(character)
%s 문자열(string)
print('나는 %d살입니다.' % 20)
print('나는 %s를 좋아합니다.' % '파이썬')
print('Apple은 %c로 시작해요.' % 'A')
print('나는 %s살입니다.' % 20)

>> 나는 20살입니다.
>> 나는 파이썬를 좋아합니다.
>> Apple은 A로 시작해요.
>> 나는 20살입니다.

 

값이 여러개일 때

print('나는 %s색과 %s색을 좋아해요.' % ('파란', '빨간'))

>> 나는 파란색과 빨간색을 좋아해요.

 

format()함수 사용하기

print('나는 {}살입니다.'.format(20))
print('나는 {}색과 {}색을 좋아해요.'.format('파란', '빨간'))
print('나는 {0}색과 {1}색을 좋아해요.'.format('파란', '빨간'))
print('나는 {1}색과 {0}색을 좋아해요.'.format('파란', '빨간'))

>> 나는 20살입니다.
>> 나는 파란색과 빨간색을 좋아해요.
>> 나는 파란색과 빨간색을 좋아해요.
>> 나는 빨간색과 파란색을 좋아해요.

문자열에 비어있는 중괄호만 표시하면 값이 순서대로 들어가고, {0}, {1}처럼 인덱스를 넣으면 인덱스에 맞춰 {0} 위치에는 값1, {1} 위치에는 값2가 들어간다.

 

중괄호 안에 이름을 넣을 수도 있다.

print('나는 {age}색과 {color}색을 좋아해요.'.format(age=20, color='빨간'))
print('나는 {age}색과 {color}색을 좋아해요.'.format(color='빨간', age=20))

>> 나는 20색과 빨간색을 좋아해요.
>> 나는 20색과 빨간색을 좋아해요.

f-문자열 사용하기

age = 20
color = '빨간'
print(f'나는 {age}색과 {color}색을 좋아해요.')

>> 나는 20색과 빨간색을 좋아해요.

탈출 문자

print('백문이 불여일견 백견이 불여일타')

이 문장을 두 줄로 출력하고 싶을 때

print('백문이 불여일견\n백견이 불여일타')

코드에서 \n은 문자열 안에서 줄 바꿈할 때 사용하는 탈출 문자이다.

 

\" 와 \'

print('\'작은따옴표\'를 쓰고 싶어요.')
print("\"큰따옴표\"를 쓰고 싶어요.")

>> '작은따옴표'를 쓰고 싶어요.
>> "큰따옴표"를 쓰고 싶어요.

\\

어떤 폴더나 파일의 전체 경로를 출력할 때

print('C:\Users\Public\Pictures')

\U, \P 처럼 유효하지 않은 탈출 문자를 포함하면 오류가 난다.

이 때 역슬래시 2개를 사용해서 제대로 출력시킬 수 있다.

print('C:\\Users\\Public\\Pictures')

문자열 앞에 r을 붙이는 방법도 있다. r을 추가하면 문자열 내에 어떤 값이 있든지 무시하고 그대로 출력한다.

\r, \b, \t

\r은 커서를 맨 앞으로 이동시킴. 

\b는 키보드의 백스페이스와 같은 역할을 함.

\t는 키보드의 tap과 같이 여러 칸을 띄어 쓰는 역할을 함.

print('Red Apple\rPine')
print('Redd\bApple')
print('Red \tApple')

>> PineApple
>> RedApple
>> Red  Apple

 

실습 문제

문제 : 사이트별로 비밀번호를 생성하는 프로그램을 작성하세요.
http://naver.com
http://daum.net
http://google.com
http://youtube.com

조건
1. http:// 부분은 제외한다.
2. 처음 만나는 점(.) 이후 부분도 제외한다.
3. 남은 글자 중 처음 세 자리 + 글자 개수 + 글자 내 'e'의 개수 + '!'로 구성한다.
4. 프로그램 실행했을 때 실행결과는 다음 형태로 나와야 한다.

http://naver.com의 비밀번호는 nav51!입니다.

 

url = 'http://naver.com'
re_url = url[7:-4]
url_len = len(re_url)
passward = re_url[:3] + str(url_len) + str(re_url.count('e')) + '!'

print(f'{url}의 비밀번호는 {passward}입니다.')

 

셀프체크

 

문제 : 영어 문장이 주어졌을 때 첫 번째 글자는 대문자로, 나머지 글자는 모두 소문자로 변환하는 프로그램을 작성하세요.

주어진 문장 : the early bird catches the worm.
The early bird catches the worm.

주어진 문장 : Action Speak Louder Than Words.
Action speak louder than words.

주어진 문장 : PRACTICE MAKES PERFECT.
practice makes perfect.

text = 'PRACTICE MAKES PERFECT.'
text = text[0].upper() + text[1:].lower()
print(text)

'Python 기초' 카테고리의 다른 글

[Python] 제어문 정리  (0) 2023.03.19
[Python] 자료구조 정리  (0) 2023.03.19
[Python] 연산자 정리  (0) 2023.03.17
[Python] 자료형과 변수  (1) 2023.03.10
파이썬 Class: 클래스의 모든 것  (0) 2023.02.18

댓글