본문 바로가기
요약정리/하우투파이썬

str: encode(), expandtabs()

by JustDoIT 2020. 4. 2.

encode()     expandtabs()


 

문자열을 인코딩하는 메서드와 탭을 공백으로 변환하는 메서드

 

출처: 픽사베이

 

encode()

 

encode()bytes 모듈의 decode()와 한 짝입니다. 이름 그대로 str 객체를 bytes 객체로 인코딩하고, 역방향으로 디코딩합니다. 이때 기본 인코딩/디코딩 방식은 'utf-8'입니다. 다른 방식을 적용하려면 따로 지정해야 합니다.

 

한편, decode()bytearray 모듈에도 제공됩니다. 두 모듈의 차이는 변형성 여부입니다. bytes는 변형 불가능 객체이고, bytearray는 변형 가능 객체입니다. 튜플과 리스트의 관계처럼 생각하면 쉽습니다. bytearray 객체를 만드는 방법은 잠시 후에 소개하겠습니다.

 

그런데 bytesbytearray는 언제 사용할까요? str에서는 직접 처리하기 곤란한 바이트 단위의 작업에 사용합니다. str 객체는 UTF-8로 처리되는 반해 bytesbytearrayASCII 코드로 처리되기 때문입니다.

 

encode()decode()는 다음처럼 사용합니다. 단, bytes 객체는 내장 함수인 bytes()를 사용해도 만들 수 있습니다.

 

>>> str_u = '안녕하세요'
>>> str_bytes = str_u.encode()

>>> type(str_bytes)
<class 'bytes'>

>>> str_bytes
b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94'

>>> bytes.decode(str_bytes)
'안녕하세요'

 

'utf-8' 대신 다른 인코딩을 지정하려면 다음처럼 합니다.

 

>>> str_bytes_cp949 = str_u.encode('cp949')
>>> str_bytes_cp949
b'\xbe\xc8\xb3\xe7\xc7\xcf\xbc\xbc\xbf\xe4'

>>> bytes.decode(str_bytes_cp949, 'cp949')
'안녕하세요'

 

한편 bytearray로 변환하려면 다음처럼 합니다.

 

>>> str_u = '안녕하세요'
>>> str_ba = bytearray(str_u, 'euc-kr')
>>> type(str_ba)
<class 'bytearray'>

>>> str_ba
bytearray(b'\xbe\xc8\xb3\xe7\xc7\xcf\xbc\xbc\xbf\xe4')

>>> str_ba.decode('euc-kr')
'안녕하세요'

 

그리고 bytearray변형 가능mutable 객체이기 때문에 다음 같은 연산도 가능합니다.

 

>>> str_ba[-1]
228

>>> str_ba[-1] = 232
>>> str_ba.decode('euc-kr')
'안녕하세욤'

 

마지막으로 bytes()bytearray()를 살펴보겠습니다.

 

>>> str_b = bytes()		# 빈 bytes 객체를 만듭니다.
>>> str_b
b''

>>> str_ba = bytearray()	# 빈 bytearray 객체를 만듭니다.
>>> str_ba
bytearray(b'')

# 길이를 지정하면 그만큼 0으로 채워진 객체가 만들어집니다.
>>> str_b = bytes(10)
>>> str_b
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

>>> str_ba = bytearray(10)
>>> str_ba
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')

# 이를 'utf-8' 방식의 str 객체로 변환하면 다음과 같습니다.
>>> str_b.decode()
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> str_ba.decode()
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

 

expandtabs()

 

expandtabs()는 이름 그대로 탭을 공백으로 변환해 내줍니다. 따로 지정하지 않으면 탭은 영문자 8개 크기로 간주됩니다.

 

# str_expandtabs.py
gr = 'hi' + '\t' + 'hello' + '\t' + 'hey''
print(f"1. gr.expandtabs() : {gr.expandtabs()}")
print(f"2. gr.expandtabs(4): {gr.expandtabs(4)}")


# result
1. gr.expandtabs() : hi      hello   hey
2. gr.expandtabs(4): hi  hello   hey

 

사용법이나 결과는 다분히 직관적이므로 구체적인 설명은 생략하겠습니다.

여기까지입니다. 읽어 주셔서 고맙습니다.

 

Today is mutant yesterdays.
영리 목적으로는 저자의 허락 없이 편집, 배포하실 수 없습니다.
Authored by justdoit709@gmail.com

댓글