문자열 포맷팅
파이썬에서 문자열 포맷팅은 데이터를 특정 형식으로 표현할 때 매우 유용한 기능입니다.
문자열 포맷팅을 왜 사용해야 하는지에 대해서 알아봅니다.
이름을 출력하는 예제코드를 작성합니다.
코드:
name = "Jay"
info = "My name is " + name
print(info)
결과:
My name is Jay
My name is 에 이름인 Jay를 더하여 My name is Jay 가 출력되었습니다.
이번엔 나이를 출력하는 예제코드를 작성합니다.
코드:
age = 35
info = "I am " + str(age) + " years old."
print(info)
결과:
I am 35 years old.
나이를 바인딩한 age는 숫자형이므로 str()함수를 이용하여 문자열로 변환 후 문자열을 더해 출력하였습니다. I am 과 years old. 사이에 있어 앞뒤로 덧셈을 이용하였습니다.
이번에는 이름과 나이를 모두 출력해보도록 합니다.
코드:
name = "Jay"
age = 35
info = "My name is " + name + " I am " + str(age) + " years old."
print(info)
결과:
My name is Jay I am 35 years old.
이름과 나이를 문자열 사이사이에 더해 출력하였습니다. 문자열이 길어지면 길어질 수록 내가 원하는 위치에 데이터를 넣기가 어렵습니다. 이처럼 문자열을 잘라 중간중간에 더해 뭔하는 문자열을 만들었습니다. 이러한 과정은 문자열 포맷팅을 사용하면 편리하게 사용할 수 있습니다. 최신 파이썬 3.11 이상의 버전에서는 문자열 포맷팅으로 사용할 수 있는 방법으로 %, .format, f-string 으로 총 3가지가 있습니다. 이제부터 하나씩 알아보도록 합니다.
%포맷팅
% 포맷팅은 C언어계열에서 자주 사용하는 방식으로 파이썬에서도 사용가능합니다. 아래의 코드를 이용하여 어떻게 사용하는지 알아봅니다.
코드:
name = "Jay"
info = "My name is %s" % (name)
print(info)
결과:
My name is Jay
문자열 사이에 %s (문자열) 을 입력 후 문자열의 끝에 %를 입력합니다. () 괄호안에 변수 또는 값을 넣어 %s 문자열 부분에 대입합니다.
%s는 name 변수의 값 Jay로 치환됩니다.
숫자도 치환 할 수 있습니다.
코드:
age = 35
info = "I am %d years old." % (age)
print(info)
결과:
I am 35 years old.
정수형 숫자를 치환하기 위해서는 %d (정수형) 을 사용합니다.
% 포맷팅은 아래와 같이 다양한 형식을 제공합니다.
%s - 문자열 (String)
%d - 정수 (Integer)
%f - 부동소수점 (Floating Point)
%.Nf - 고정 소수점 (Fixed Floating Point)
%x / %X - 16진수 (Hexadecimal)
%o - 8진수 (Octal)
%% - 리터럴 % 문자 (Literal % character)
필자도 종류가 많아 이부분을 다 기억하고있지 않습니다. 파이썬에서 %포맷특의 특이한점은 %s 문자열로 넣으면 어떤 값이든 자동으로 변환되어 들어갑니다. % 포맷팅을 사용한다면 %s 만 기억해두어도 사용하는데 불편한점이 없습니다.
코드:
name = "Jay"
age = 35
info = "My name is %s and I am %s years old." % (name, age)
print(info)
결과:
My name is Jay and I am 35 years old.
%포맷팅 방식에서 숫자, 문자 모두 %s를 이용하면 문자열 포맷팅이 가능합니다.
.format 을 이용한 포맷팅 방식에 대해서 알아봅니다.
문자열이나 문자열을 바인딩하는 변수에 .format을 이용하여 원하는 위치에 문자를 넣을 수 있는 방법입니다.
코드:
fruit = "apple"
count = 3
sentence = "I have {} {}s.".format(count, fruit)
print(sentence)
결과:
I have 3 apples.
문자열에 {} 대괄호를 이용하여 문자열을 넣을 위치를 정해줍니다. .format을 이용하여 넣을 값을 입력하면 {} 가 입력된 순서대로 값이 입력됩니다. 값은 문자열, 정수형, 소수점형등을 가리지 않고 자동으로 입력됩니다.
위치 인덱스를 사용하여 원하는 위치에 값을 넣어줄수 있습니다.
코드:
animal = "cat"
legs = 4
sentence = "A {1} has {0} legs.".format(legs, animal)
print(sentence)
결과:
A cat has 4 legs.
문자열에서 {1} 의 인덱스를 입력합니다. .format에서 값 순서대로 0번부터 시작하여 {번호} 로 써진 값에 값이 입력됩니다.
같은 값을 여러번 사용할 수 있습니다.
코드:
food = "bread"
drink = "milk"
sentence = "I have {0} and {1}. I like {0} with {1}.".format(food, drink)
print(sentence)
결과:
I have bread and milk. I like bread with milk.
{번호}를 문자열에 여러번 입력하여 동일한 값을 여러번 사용할 수 있고 위치 또한 원하는 위치에 값을 넣을 수 있습니다.
{0}은 food가 바인딩한 "bread" 값으로 입력되고 {1}은 drink가 바인딩한 "milk"로 입력되었습니다.
f-string(f-문자열) 포맷팅
이 방법은 파이썬 3.6 이상에서 사용할 수 있으며, 가장 직관적이고 간결한 포맷팅 방법입니다.
문자열의 앞에 f를 붙여 사용합니다.
코드:
name = "Tom"
sentence = f"My name is {name}."
print(sentence)
결과:
My name is Tom.
문자열의 앞에 f를 붙여 f-string 으로 사용합니다. 그후 문자열에 {변수} 또는 {값} 형식으로 입력하면 {}안의 값이 입력됩니다. 매우 직관적이어서 사용하기에 편리합니다.
여러개의 값을 원하는 위치에 입력하여 사용합니다.
코드:
animal = "dog"
sound = "bark"
sentence = f"A {animal} can {sound}."
print(sentence)
결과:
A dog can bark.
{animal} 값은 dog로 입력되고 {sound} 값은 bark로 입력됩니다. 여러번 원하는 위치에 입력해서 사용해도 됩니다.
수식을 넣어 연산 또한 가능합니다.
코드:
apples = 4
oranges = 3
sentence = f"I have {apples + oranges} fruits in total."
print(sentence)
결과:
I have 7 fruits in total.
4+3의 값인 7이 입력되었습니다. {}안에 수식을 넣어 연산이 가능합니다. f-string 방식이 가장 직관적이기때문에 필자는 주로 이방법을 사용하여 파이썬 코드를 작성합니다.
% 포맷팅, .format 포맷팅, f-string 포맷팅 방식에 대해서 알아보았습니다.
문자열 메서드
파이썬에서 문자열(String)은 다양한 메서드를 제공하여 문자열을 조작하고 처리할 수 있습니다. 이 메서드들은 문자열을 다룰 때 매우 유용합니다.
문자열이나 문자열변수에 .(점)을 찍어 다양한 메서드의 사용이 가능합니다. VS Code등 파이썬 편집기에서 대부분 제공하는 기능으로 .(점)을 찍으면 사용할 수 있는 다양한 메서드를 확인 할 수 있습니다.
str.upper()
문자열의 모든 문자를 대문자로 변환합니다.
코드:
text = "hello"
result = text.upper()
print(result)
결과:
HELLO
소문자 hello를 대문자 HELLO로 변환하였습니다.
str.lower()
문자열의 모든 문자를 소문자로 변환합니다.
코드:
text = "HELLO"
result = text.lower()
print(result)
결과:
hello
대문자 HELLO를 소문자 hello로 변환하였습니다.
str.capitalize()
문자열의 첫 번째 문자를 대문자로, 나머지는 소문자로 변환합니다.
코드:
text = "hello world"
result = text.capitalize()
print(result)
결과:
Hello world
hello world 에서 첫번째 문자만 대문자로 변환하여 Hello world로 출력하였습니다.
str.strip()
문자열의 앞뒤 공백이나 특정 문자를 제거합니다.
코드:
text = " hello "
result = text.strip()
print(result)
결과:
hello
문자열의 앞뒤 공백이 제거되었습니다. 왼쪽공백을 제거하는 lstrip() 오른쪽 공백을 제거하는 rstrip()도 있습니다. l은 left, r은 right 의 앞글자 입니다.
str.replace(old, new)
문자열 내의 특정 문자열을 다른 문자열로 바꿉니다.
코드:
text = "I like apples"
result = text.replace("apples", "bananas")
print(result)
결과:
I like bananas
apples를 bananas 로 변경하였습니다.
전화번호에서 - 부분을 삭제해보도록 합니다.
코드:
text = "010-1234-5678"
result = text.replace("-", "")
print(result)
결과:
01012345678
-를 찾아 "" 빈값으로 변환하였습니다. 빈값으로 변환하면 삭제됩니다. 전화번호의 - 부분만 찾아 삭제하였습니다.
str.split(separator)
문자열을 구분자를 기준으로 분리하여 리스트로 반환합니다. 기본 구분자는 공백입니다.
코드:
text = "hello world"
result = text.split()
print(result)
결과:
['hello', 'world']
인자를 입력하지 않아 기본값인 공백으로 값을 구분하여 리스트로 반환하였습니다. 리스트는 아직 배우지 않았지만 여러개의 값을 가지는 자료구조형 자료형 입니다.
구분자를 입력하여 입력한 구분자로 나눌 수 있습니다.
코드:
text = "apple,banana,cherry"
result = text.split(",")
print(result)
결과:
['apple', 'banana', 'cherry']
,(콤마)를 구분자로 입력하여 ,(콤마)를 기준으로 값을 나누어 리스트로 반환하였습니다.
str.join(iterable)
문자열을 구분자로 사용하여 리스트나 튜플 등의 요소들을 하나의 문자열로 결합합니다.
코드:
words = ["apple", "banana", "cherry"]
result = ",".join(words)
print(result)
결과:
apple,banana,cherry
여러개의 값을 가지는 리스트에서 .join을 이용하여 하나의 문자열로 결합하였습니다.
str.find(substring)
문자열에서 특정 부분 문자열(substring)을 찾아 그 시작 위치(인덱스)를 반환합니다. 찾지 못하면 -1을 반환합니다.
코드:
text = "I love python"
result = text.find("python")
print(result)
결과:
7
python을 찾으면 찾은 처음 위치를 반환합니다. python 에서 시작하는 p의 위치인 7을 반환하였습니다.
str.count(substring)
문자열에서 특정 부분 문자열이 몇 번 나타나는지 계산합니다.
코드:
text = "banana"
result = text.count("a")
print(result)
결과:
3
banana 문자열에서 a의 갯수인 3을 반환하였습니다.
str.startswith(prefix)
문자열이 특정 접두사(prefix)로 시작하는지 확인합니다. True 또는 False를 반환합니다.
코드:
text = "hello world"
result = text.startswith("hello")
print(result)
결과:
True
hello world가 hello로 시작하는지 확인하여 hello로 시작하기때문에 True(참)을 반환하였습니다. 거짓일 경우 False를 반환합니다.
str.endswith(suffix)
문자열이 특정 접미사(suffix)로 끝나는지 확인합니다. True 또는 False를 반환합니다.
코드:
text = "hello world"
result = text.endswith("world")
print(result)
결과:
True
hello world 문자열이 world로 끝나기 때문에 True(참)을 반환합니다.
str.isdigit()
문자열이 모두 숫자로 이루어져 있는지 확인합니다. True 또는 False를 반환합니다.
코드:
text = "12345"
result = text.isdigit()
print(result)
결과:
True
문자열 12345는 모두 숫자이기때문에 True(참)을 반환하였습니다.
코드:
print("3.14".isdigit())
print("-123".isdigit())
결과:
False
False
소수점과, - 음수는 .(점)과 -(마이너스) 기호로 인해 False(거짓)을 반환합니다.
str.isalpha()
문자열이 모두 알파벳 문자로 이루어져 있는지 확인합니다. True 또는 False를 반환합니다.
코드:
text = "hello"
result = text.isalpha()
print(result)
결과:
True
hello는 모두 알파벳문자로 이루어졌기때문에 True를 반환하였습니다.
더 많은 메서드가 있지만 너무 많아서 어떤 기능을 하는지 모릅니다. 이럴때 ChatGPT를 사용하여 질문하면 더욱더 다양한 기능들을 확인해 볼 수 있습니다.
또는 직접적으로 무슨 기능을 하는 메서드가 있어? 라고 질문을 해도 됩니다. 원하는 기능을 직접적으로 질문하여 답변을 얻을 수 있습니다.
'파이썬 > 파이썬 기초문법' 카테고리의 다른 글
파이썬 문법 - 3.3 문자열 (0) | 2024.08.29 |
---|---|
파이썬 문법 - 3.2 숫자형 (1) | 2024.08.29 |
파이썬 문법 - 3.1 변수 (1) | 2024.08.28 |
파이썬 문법 - 2.3 print 및 주석 연습문제 (0) | 2024.08.27 |
파이썬 문법 - 2.2 주석 (0) | 2024.08.27 |
파이썬 문법 - 2.1 print 함수로 출력하기 (0) | 2024.08.27 |