본문 바로가기

Programming/Python

[Python 3.x] 바이트 스트림(byte-stream) 객체의 등장

728x90
반응형
Yelp Dataset을 csv로 변환하는 코드가 python 2.x로 짜여있어서 만나게 된 오류..!
파이썬 코드를 돌리다보면 2.x와 3.x 간의 버전 차이로 오류가 나는 부분이 상당히 자주 있다.

 

예전에는 단순히 구글링해서 코드만 돌아가게 바꾸고 넘어갔는데 어떤 차이 때문에 발생한건지 이해하면 더 좋을 것 같아서 정리해본다.
오늘 내가 만난 오류는 바로 아래와 같다.
TypeError: a bytes-like object is required, not 'str'

이는 바로 3.x에서는 "바이트 스트림 문자열 상수(리터럴)"가 생겼기 때문이라고 한다.

많은 함수들이 기존 문자열 대신 이 바이트 스트림을 사용하고 있다고 한다. 

 

 

그렇다면 바이트 스트림(Byte-stream)이란 무엇일까?

말 그대로 바이트 단위로 데이터를 주고받는 것을 의미한다. (1 byte = 8bit)

데이터는 사실 모든 것이 다 바이트로 이루어져있다.

텍스트도 바이트, 이미지도 바이트, ... 

아래 그림은 byte를 사용하여 텍스트 데이터를 표현한 예제이다.

4-byte stream으로 code라는 단어를 표현한 것!

 

https://www.alpharithms.com/byte-stream-411116/#bits-vs-bytes

이렇게 바이트로 표현된 데이터를 바이트 그 자체로 주고받거나 또는 저장하는 것을 바이트 스트림이라고 한다.

 

Python 2에서는 str과 bytes가 동일한 objec로 처리되었다고 한다.

그러나 Python 3에서 부터는 byte objects를 따로 구분짓게 되었다.

그렇다면 문자열과 Byte objects간의 차이는 무엇일까?

 

1. Byte object는 byte의 sequence인 반면 문자열은 문자의 sequence이다.

2. Byte object는 기계가 읽을 수 있는 형태이고, 문자열은 사람이 읽을 수 있는 형태이다.

3. Byte object는 기계가 읽을 수 있으므로 디스크에 직접 저장할 수 있다.

    문자열은 디스크에 저장하기 전에 인코딩이 필요하다.

즉, 아래 그림과 같이 이해하면 될 것 같다. 
 
https://www.geeksforgeeks.org/byte-objects-vs-string-python/
 

 

바이트 객체의 사용법은 간단하다.

문자열 객체 앞에 byte를 의미하는 b만 붙여주면 된다.

 

>>> b = b'hello world'
>>> b
b'hello world'

 

이렇게 만든 byte 객체는 문자열과는 다른 타입이다.

 

>>> 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'

 

잘못 된 부분이 있거나 궁금한 점이 있으면 언제나 댓글 부탁드립니다!

 

참고자료)

 

[Python] 버전2에서 버전3으로 옮겨갈 때 주의 점 들

파이썬이 1990년 말에 만들어 졌다고 알고 있습니다. (실제 1.0은 1994년에 나왔군요) 거의 25살 청년이 다 되었네요. 적지 않은 나이이지만, 우리나라에서는 비교적 최근에 유명해 졌다고 할 수 있

egloos.zum.com

 

바이트 Stream과 문자 스트림

Byte Stream은 데이터를 있는 그대로 송수신 하는 Stream. 그리고 이 Byte Stream을 이용하여 문자를 파일에 저장하는 것도 가능하다. 물론 이렇게 저장된 데이터를 자바 프로그램을 이용해서 읽으면 문

story.stevenlab.io

 

What's A Byte Stream, Anyway? - αlphαrithms

Byte streams are a sequence of bytes used by programs to input and output information. The terms byte stream and octet-stream are both used somewhat synonymously, though octet streams are common among networking terminology. Table of Contents show 1 Bits

www.alpharithms.com

 

Byte Objects vs String in Python - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

728x90
반응형