Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 이진 시퀀스 유형 완벽 가이드: bytes, bytearray, memoryview 활용법

Python 이진 시퀀스 유형이란?

Python에서 bytesbytearray는 이진 데이터를 다루는 데 사용되는 대표적인 자료형입니다. 이 두 객체는 memoryview라 불리는 버퍼 프로토콜(buffer protocol)에 의해 지원되며, memoryview를 활용하면 원본 데이터를 복사하지 않고도 다른 이진 객체의 내부 메모리에 직접 접근할 수 있어 성능 면에서 큰 이점을 얻을 수 있습니다.

바이트 리터럴 작성 방법

바이트 리터럴은 다음과 같은 형식으로 생성할 수 있습니다.

  • b'작은따옴표 하나로 감싼 바이트'

  • b"큰따옴표 하나로 감싼 바이트"

  • b'''세 개의 작은따옴표''' 또는 b"""세 개의 큰따옴표"""

bytes와 bytearray의 주요 메서드

fromhex(string)

fromhex() 메서드는 바이트 객체를 반환합니다. 각 바이트가 두 개의 16진수 숫자로 구성된 문자열을 인자로 받으며, 이때 ASCII 공백 문자는 무시됩니다.

hex()

hex() 메서드는 각 바이트를 두 자리 16진수 문자열로 변환하여 반환합니다.

replace(byte, new_byte)

replace() 메서드는 기존 바이트 시퀀스를 새로운 바이트 시퀀스로 교체한 결과를 반환합니다.

count(sub[, start[, end]])

start와 end 사이의 지정된 범위에서 부분 시퀀스가 겹치지 않고 나타나는 횟수를 반환합니다.

find(sub[, start[, end]])

find() 메서드는 부분 시퀀스가 처음 나타나는 위치를 찾습니다. 검색에 성공하면 해당 인덱스를, 실패하면 -1을 반환합니다.

partition(sep)

partition() 메서드는 지정한 구분자를 기준으로 데이터를 분리하여, 구분자 앞부분·구분자·뒷부분으로 구성된 튜플을 반환합니다.

memoryview(obj)

memoryview() 함수는 인자로 전달된 객체의 메모리 뷰 객체를 반환합니다. 메모리 뷰는 Python 버퍼 프로토콜을 안전하게 활용할 수 있는 방법으로, 객체의 내부 버퍼에 대한 직접 접근을 허용합니다.

예제 코드

hexStr = bytes.fromhex('A2f7 4509')
print(hexStr)
byteString = b'\xa2\xf7E\t'
print(byteString.hex())

bArray1 = b"XYZ"
bArray2 = bArray1.replace(b"X", b"P")
print(bArray2)

byteArray1 = b'ABBACACBBACA'
print(byteArray1.count(b'AC'))

print(byteArray1.find(b'CA'))
bArr = b'Mumbai,Kolkata,Delhi,Hyderabad'
partList = bArr.partition(b',')
print(partList)

myByteArray = bytearray('String', 'UTF-8')
memView = memoryview(myByteArray)

print(memView[2]) #ASCII of 'r'
print(bytes(memView[1:5]))

실행 결과

b'\xa2\xf7E\t'
a2f74509
b'PYZ'
3
4
(b'Mumbai', b',', b'Kolkata,Delhi,Hyderabad')
114
b'trin'

예제 해설

fromhex()는 공백을 무시하고 16진수 문자열 'A2f7 4509'를 바이트 객체로 변환하며, hex()는 이를 다시 'a2f74509'라는 16진수 문자열로 되돌립니다. replace()는 b'XYZ'에서 X를 P로 교체해 b'PYZ'를 만들어내고, count()는 b'AC'가 세 번 등장함을 보여줍니다. 또한 partition()은 쉼표를 기준으로 도시 이름 목록을 분리하며, memoryview는 bytearray의 특정 인덱스 값과 슬라이싱 결과를 bytes로 변환해 출력하는 방법도 함께 시연합니다.