파이썬 bytearray() 함수를 통해 바이트 배열의 특성을 유지하면서도 가변적인 이진 데이터를 효율적으로 처리할 수 있습니다. 즉, 바이트 배열을 문자열이나 리스트처럼 데이터를 쉽게 조작할 수 있습니다. 이번 포스팅에서는 bytearray()
함수의 사용법을 알아보고, 그 활용 방안과 주의할 점들을 자세히 살펴보겠습니다.
목차
파이썬 bytearray()란?
bytearray()
는 파이썬에서 제공하는 가변 길이의 바이트 시퀀스입니다. 바이트 배열은 기본적으로 이진 데이터를 다루며, 문자열처럼 데이터 조작이 가능합니다. bytes
와는 달리 변경이 가능하다는 점에서 큰 차이점을 보입니다.
bytearray() 기본 사용법
bytearray()
는 여러 가지 방식으로 생성할 수 있습니다. 가장 간단한 방법은 빈 바이트 배열을 생성하는 것입니다.
b = bytearray()
print(b)
빈 배열 외에도 다른 자료형을 바이트 배열로 변환할 수도 있습니다.
b = bytearray("Hello", "utf-8")
print(b)
b = bytearray([72, 101, 108, 108, 111])
print(b)
문자열 “Hello”를 바이트 배열로 변환한 것과 아스키 코드 값으로 구성된 리스트를 bytearray(b’Hello’)로 변환한 결과는 아래와 같습니다.
이처럼 bytearray()
는 다양한 자료형을 입력으로 받을 수 있으며, 각각을 바이트 배열로 변환해 줍니다.
바이트 배열 조작하기
bytearray()
는 가변형 자료형이므로 데이터를 변경할 수 있습니다. 예를 들어, 바이트 배열의 특정 인덱스에 있는 값을 바꾸거나 추가할 수 있습니다.
바이트 배열 값 수정
리스트처럼 특정 인덱스의 값을 변경할 수 있습니다. 다만, 각 값은 0~255 범위의 정수여야 한다는 점을 기억해야 합니다.
b = bytearray(b'Hello')
b[1] = 97
print(b)
바이트 배열에 값 추가하기
리스트와 마찬가지로 append()
함수를 사용하여 바이트 배열의 끝에 값을 추가할 수 있습니다.
b.append(33)
print(b)
또한 extend()
를 사용하면 여러 개의 값을 한 번에 추가할 수도 있습니다.
b.extend([32, 87, 111, 114, 108, 100])
print(b)
문자열과의 변환
bytearray()
는 주로 이진 데이터를 다루기 때문에 문자열과의 변환이 필수적입니다. 이를 위해 decode()
와 encode()
메서드를 사용할 수 있습니다.
바이트 배열을 문자열로 변환
바이트 배열을 문자열로 변환할 때는 decode()
를 사용합니다. 이 때 어떤 인코딩을 사용할지 명시해주어야 합니다. 가장 일반적인 인코딩 방식은 ‘utf-8’입니다.
b = bytearray(b'Hello')
s = b.decode('utf-8')
print(s)
문자열을 바이트 배열로 변환
반대로 문자열을 utf-8로 인코드하여 바이트 배열로 변환하려면 encode()
를 사용합니다.
s = "Hello"
b = bytearray(s.encode('utf-8'))
print(b)
주의사항: 바이트 범위
bytearray()
의 각 요소는 0에서 255 사이의 값이어야 합니다. 이 범위를 벗어난 값을 추가하거나 변경하려고 하면 오류가 발생합니다.
b = bytearray(b'Hello')
b[0] = 300
다음과 같이 “ValueError: byte must be in range(0, 256)” 오류 메시지를 통해서 0~255의 값을 사용할 것을 알려줍니다. 따라서 바이트 배열을 다룰 때는 항상 이 범위 내에서 값을 설정해야 합니다.
bytearray()의 활용
bytearray()
는 주로 네트워크나 파일 입출력에서 이진 데이터를 처리할 때 유용합니다. 예를 들어, 네트워크 소켓에서 받은 데이터를 처리하거나 바이너리 파일을 읽고 쓸 때 자주 사용됩니다.
파일 읽기와 바이트 배열
바이너리 파일을 읽을 때 bytearray()
를 사용하여 데이터를 처리할 수 있습니다.
with open("example.bin", "rb") as file:
data = bytearray(file.read())
print(data)
이진 파일을 처리하는 상황에서는 bytearray()
의 가변적인 특성을 활용해 데이터를 효율적으로 조작할 수 있습니다.
정리
파이썬 bytearray()
는 이진 데이터를 가변적으로 처리할 수 있는 강력한 도구입니다. 문자열처럼 데이터를 조작할 수 있으면서도 바이트 배열의 특성을 유지할 수 있어 메모리 효율이 높고, 네트워크나 파일 입출력 등에서 특히 유용합니다. 바이트 범위 제한과 같은 몇 가지 주의사항만 기억한다면 다양한 용도로 활용할 수 있는 매우 유용한 자료형입니다.
이를 통해 이진 데이터를 보다 효율적으로 처리할 수 있으니, 꼭 한번 활용해 보시기 바랍니다.