파이썬
기본 데이터 타입
문자열
변환

파이썬 문자열 변환 함수: 숫자, 정수, 실수, 바이너리, 16진수, 날짜, 바이트, 리스트

이번 포스팅은 파이썬 문자열을 다른 데이터 타입으로 변환하는 방법 을 알아봅니다.

파이썬 문자열은 클라이이언트와 상호작용하는 과정에 중요한 역할을 합니다. input() 함수로 받는 데이터, 웹 API로부터 받는 XML, JSON 데이터 모두 1차적으로는 문자열 형식을 갖습니다. 백엔드 서버에서는 문자열을 해석 혹은 파싱해서 원하는 데이터 타입으로 변환한 후, 필요한 작업을 수행해야 합니다.

>>> name = input("당신의 이름은 무엇입니까?: ")
당신의 이름은 무엇입니까?: 최강호
 
>>> type(name)
<class 'str'>

1. 숫자 변환

그럼, 파이썬 문자열을 원하는 형식의 숫자로 변환하는 방법부터 알아보겠습니다.

모든 숫자 변환은 실패할 가능성이 있습니다. 실패 시, 예외가 일어나기 때문에 항상 예외 처리를 함께 해주어야 합니다. 아래 예제 코드는 모두 예외 처리를 포함합니다.

1.1. 정수

파이썬 문자열을 정수로 변환하기 위해서는, int() 생성자를 사용합니다.

💡

생성자는 특정 파이썬 클래스의 객체를 생성할 때 사용하는 특별 함수입니다. 클래스 포스트에서 알아볼게요.

정수 변환에 성공하는 예제는 다음과 같습니다.

str_one_hundred = "100"
str_minus_five = "-5"
 
try:
    one_hundred = int(str_one_hundred)
    minus_five = int(str_minus_five)
except ValueError:
    print(f"Couldn't cast {repr(str_one_hundred)} to a number")
    print(f"Couldn't cast {repr(str_minus_five)} to a number")
else:
    print(f"one_hundred: {one_hundred}")
    print(f"minus_five: {minus_five}")
 
# Output:
# one_hundred: 100
# minus_five: -5

정수 변환에 실패하는 예제는 다음과 같습니다.

str_alphabet = "abc"
 
try:
    alphabet = int(str_alphabet)
except ValueError:
    print(f"Couldn't cast {repr(str_alphabet)} to a number")
else:
    print(f"alphabet: {alphabet}")
 
# Output:
# Couldn't cast 'abc' to a number

1.2. 실수

파이썬 문자열을 실수로 변환하기 위해서는, float() 생성자를 사용합ㄴ다.

실수 변환에 성공하는 예제는 다음과 같습니다.

str_three_point_two_four = "3.24"
str_zero_point_one_two = "-0.12"
 
try:
    three_point_two_four = float(str_three_point_two_four)
    zero_point_one_two = float(str_zero_point_one_two)
except ValueError:
    print(f"Couldn't cast {repr(str_three_point_two_four)} to a float")
    print(f"Couldn't cast {repr(str_zero_point_one_two)} to a float")
else:
    print(f"three_point_two_four: {three_point_two_four}")
    print(f"zero_point_one_two: {zero_point_one_two}")
 
# Output:
# three_point_two_four: 3.24
# zero_point_one_two: -0.12

정수 변환에 실패하는 예제는 다음과 같습니다.

str_alphabet = "abc"
 
try:
    alphabet = float(str_alphabet)
except ValueError:
    print(f"Couldn't cast {repr(str_alphabet)} to a float")
else:
    print(f"alphabet: {alphabet}")
 
# Output:
# Couldn't cast 'abc' to a float

1.3. 2진수 (바이너리)

파이썬은 따로 2진수 바이너리 형식의 데이터 타입을 지원하지 않습니다. 따라서, 2진수 바이너리 형식 문자열을 정수 타입으로 변환하여 관리해야 합니다.

정수로 변환하기 위해서는, int() 생성자와 선택적 파라미터 base를 사용합니다.

binary_string = "101010"
binary_integer = int(binary_string, base=2)
print(binary_integer)
 
# Outputs: 42

결과값의 정수를 바이너리 형식으로 출력하고자 하면, F-string 포스트에서 살펴본 방식을 사용할 수 있습니다. Format specifier로 접두어 0b를 추가 여부를 결정할 수도 있습니다.

print(f'{binary_integer:#b}', f'{binary_integer:b}')
('0b101010', '101010')

1.4. 16진수

파이썬은 따로 16진수 형식의 데이터 타입을 지원하지 않습니다. 따라서, 16진수 형식 문자열을 정수 타입으로 변환하여 관리해야 합니다.

정수로 변환하기 위해서는, int() 생성자와 선택적 파라미터 base를 사용합니다.

hexa_string = "14F0"
hexa_integer = int(hexa_string, base=16)
print(hexa_integer)
 
# Outputs: 5360

결과값의 정수를 16진수 형식으로 출력하고자 하면, F-string 포스트에서 살펴본 방식을 사용할 수 있습니다. Format specifier로 접두어 0x를 추가 여부를 결정할 수도 있습니다.

print(f'{hexa_integer:#x}', f'{hexa_integer:x}')
('0x14f0', '14f0')

2. 컨테이너 타입

파이썬의 내장 컨테이너 타입인 리스트, 튜플, 집합, 딕셔너리도 문자열에서 변환할 수 있습니다. 다만, 숫자 변환처럼 생성자로 변환을 시도하면, 다음과 같이 예상과 다른 결과값을 얻게 됩니다.

friends = "[이미주, 방삼식]"
friends_tuple = "(이미주, 방삼식)"
 
print(list(friends))
print(tuple(friends_tuple))
 
# Output:
# ['[', '이', '미', '주', ',', ' ', '방', '삼', '식', ']']
# ('(', '이', '미', '주', ',', ' ', '방', '삼', '식', ')')

따라서, 이러한 컨테이너 타입을 파싱하기 위해서는 다른 방법이 필요한데요. 파이썬 표준 라이브러리에 속한 ast 모듈이 제공하는 literal_eval() 함수를 사용하면 편리하게 파싱 및 변환할 수 있습니다. 이 함수는 해킹의 대상이 될 수 있는 eval() 함수의 대체입니다.

2.1. 리스트

리스트 형식을 가진 문자열을 변환하는 코드는 다음과 같이 작성할 수 있습니다.

import ast
 
list_string = "['item1', 'item2', 'item3']"
 
my_list = ast.literal_eval(list_string)
 
print(my_list)
print(type(my_list))
 
# Output:
# ['item1', 'item2', 'item3']
# <class 'list'>

2.2. 튜플

튜플 형식을 가진 문자열을 변환하는 코드는 다음과 같이 작성할 수 있습니다.

import ast
 
tuple_string = "('item1', 'item2', 'item3')"
 
my_tuple = ast.literal_eval(tuple_string)
 
print(my_tuple)
print(type(my_tuple))
 
# Output:
# ('item1', 'item2', 'item3')
# <class 'tuple'>

2.3. 집합

집합 형식을 가진 문자열을 변환하는 코드는 다음과 같이 작성할 수 있습니다.

import ast
 
set_string = "{'item1', 'item2', 'item3'}"
 
my_set = ast.literal_eval(set_string)
 
print(my_set)
print(type(my_set))
 
# Output:
# {'item3', 'item2', 'item1'}
# <class 'set'>

2.4. 딕셔너리

딕셔너리 형식을 가진 문자열을 변환하는 코드는 다음과 같이 작성할 수 있습니다.

import ast
 
dict_string = "{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}"
 
my_dict = ast.literal_eval(dict_string)
 
print(my_dict)
print(type(my_dict))
 
# Output:
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
# <class 'dict'>

3. 바이트 문자열

바이트 형식을 가진 문자열을 bytes 데이터 타입으로 변환하기 위해서는 str.encode() 메서드를 활용합니다.

byte_like_string = "b'Hello'"
actual_bytes = byte_like_string[2:-1].encode('utf-8')
print(actual_bytes)  # Outputs: b'Hello'
print(type(actual_bytes))  # Outputs: <class 'bytes'>

파이썬에서 바이트를 표현하기 위한 접두어를 삭제하고, 내용만 encode()메서드로 변환합니다. type(){;py} 함수로 바이트 타입을 확인할 수 있습니다.

4. 날짜 시간

파이썬 문자열에서 날짜 시간 정보를 추출해서 읽어오는 방법은 datetime 모듈의 strptime() 메서드를 이용합니다.

설명과 예제 코드는 datetime - 3. 날짜 및 시간 서식 지정 및 구문 분석하기 섹션을 참고해주세요.

5. 마치며

지금까지 파이썬 문자열을 숫자, 컨테이너 타입, 바이트 타입, 날짜 시간 등 여러 가지 타입으로 변환하는 방법을 알아보았습니다. 문자열 타입은 프로그램이 사용자와 소통하는 수단이 되는 만큼, 잘 이해하고 사용하길 바랍니다.

copyright for 파이썬 문자열 변환 함수: 숫자, 정수, 실수, 바이너리, 16진수, 날짜, 바이트, 리스트

© 2023 All rights reserved.