TypeError: a bytes-like object is required, not 'str'
이는 바로 3.x에서는 "바이트 스트림 문자열 상수(리터럴)"가 생겼기 때문이라고 한다.
많은 함수들이 기존 문자열 대신 이 바이트 스트림을 사용하고 있다고 한다.
그렇다면 바이트 스트림(Byte-stream)이란 무엇일까?
말 그대로 바이트 단위로 데이터를 주고받는 것을 의미한다. (1 byte = 8bit)
데이터는 사실 모든 것이 다 바이트로 이루어져있다.
텍스트도 바이트, 이미지도 바이트, ...
아래 그림은 byte를 사용하여 텍스트 데이터를 표현한 예제이다.
4-byte stream으로 code라는 단어를 표현한 것!
이렇게 바이트로 표현된 데이터를 바이트 그 자체로 주고받거나 또는 저장하는 것을 바이트 스트림이라고 한다.
Python 2에서는 str과 bytes가 동일한 objec로 처리되었다고 한다.
그러나 Python 3에서 부터는 byte objects를 따로 구분짓게 되었다.
그렇다면 문자열과 Byte objects간의 차이는 무엇일까?
1. Byte object는 byte의 sequence인 반면 문자열은 문자의 sequence이다.
2. Byte object는 기계가 읽을 수 있는 형태이고, 문자열은 사람이 읽을 수 있는 형태이다.
3. Byte object는 기계가 읽을 수 있으므로 디스크에 직접 저장할 수 있다.
문자열은 디스크에 저장하기 전에 인코딩이 필요하다.
바이트 객체의 사용법은 간단하다.
문자열 객체 앞에 byte를 의미하는 b만 붙여주면 된다.
>>> b = b'hello world'
>>> b
b'hello world'
>>> b == 'hello world'
False
>>> b == b'hello world'
True
만약 바이트 객체를 문자열로 바꾸고 싶으면 .decode(인코딩 타입)를 해주면 된다.
반대로 문자열을 바이트 객체로 바꾸고 싶으면 .encode(인코딩 타입)을 해주면 된다.
>>> s = b.decode('utf-8')
>>> s
'hello world'
>>> s.encode('utf-8')
b'hello world'
잘못 된 부분이 있거나 궁금한 점이 있으면 언제나 댓글 부탁드립니다!
참고자료)
'Programming > Python' 카테고리의 다른 글
[sklearn] Target is multiclass Error 해결 (0) | 2022.01.18 |
---|---|
[Pandas] DataFrame 모든 행, 열 출력하기 (0) | 2021.12.01 |
[Python] max 내장 함수와 선택인자(key, default) (0) | 2021.12.01 |
[Pandas] categorical data type(범주형 데이터 타입)이란? (category datatype 사용 예제, pandas.Series.cat 사용법) (0) | 2021.11.29 |
PyG 란? (0) | 2021.11.16 |