[Effective Python] | August 19, 2020
Effective Python: Second Edition 내용 정리
bytes
(8-bit values), str
(Unicode code points)Encode
: Unicode data ⇒ Binary dataDecode
: Binary data ⇒ Unicode data어떤 encoding을 사용할 것인지 명시할 수 있는데, 보통 default는 UTF-8
bytes_ins.decode('utf-8')
str_ins.encode('utf-8')
system의 default text encoding을 조심하자. 잘 모른다면, encoding parameter를 확실하게 넣어주자.
# default text encoding 찾기
import locale
print(locale.getpreferredencoding())
b'hello'
)와 str(hello
)은 >, ==, +, %
등의 operator에서 같이 사용될 수 없다. (서로 대체될 수 없음)%s
의 활용
b'red %s' % 'blue'
>> TypeError
'red %s' % b'blue'
>> red b'blue'
# 예상한 return 값은 아니지만 위의 코드가 가능한 이유는,
# `__repr__` method를 호출하기 때문 (자세한 내용은 Item 75 참조)
with open
statement
기본적으로 file handles operation은 Unicode strings이 default로 요구되는 것이고, binary를 사용하려면 말을 해줘야한다.
with open('data.bin', 'w') as f:
f.write(b'\xf1\xf2')
>> TypeError
# 'w'(write text mode) 대신에 'wb'(write binary mode)로 적어줘야한다.
with open('data.bin', 'r') as f:
data = f.read()
>> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in ...
# binary data는 읽을 때도 'r'이 아닌 'rb'로 읽어와야한다.