이번 튜토리얼에서는 파이썬의 struct 모듈에 대해 자세히 알아보겠습니다.
struct 모듈이란?
struct 모듈은 파이썬의 기본(native) 데이터 타입을 바이트 문자열로 변환하거나, 그 반대로 바이트를 다시 파이썬 데이터 타입으로 되돌릴 때 사용하는 도구입니다. 별도로 설치할 필요가 없으며, 파이썬3에 기본으로 내장되어 있어 즉시 사용할 수 있습니다.
struct 모듈은 C 언어와 밀접한 관련이 있습니다. 따라서 이 모듈을 제대로 활용하려면 C 언어에서 각 데이터 타입을 표현하는 데 쓰이는 형식 문자(format character)를 먼저 이해해야 합니다. 주요 형식 문자는 아래와 같습니다.
| 데이터 타입 | 형식 문자 |
|---|---|
| int | i |
| char | c |
| string | s |
| float | f |
struct.pack(): 데이터를 바이트로 변환하기
struct.pack() 메서드는 파이썬 데이터 타입을 바이트로 변환하는 데 사용됩니다. 첫 번째 인자로 전달된 형식 문자열에 따라 여러 개의 인자를 받을 수 있습니다.
첫 번째 인자에는 위 표에서 확인한 형식 문자를 조합한 문자열을 전달하고, 그 뒤에 변환할 값들을 원하는 만큼 나열하면 됩니다. 예를 들면 다음과 같습니다.
struct.pack('14s i', b'Tutorialspoint', 2020)— 14바이트 크기의 문자열 하나와 정수 하나를 패킹struct.pack('i i f 3s', 1, 2, 3.5, b'abc')— 정수 2개, 실수 1개, 3바이트 문자열을 패킹
예제
# struct 모듈 임포트
import struct
# 바이트로 변환
print(struct.pack('14s i', b'Tutorialspoint', 2020))
print(struct.pack('i i f 3s', 1, 2, 3.5, b'abc'))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
b'Tutorialspoint\x00\x00\xe4\x07\x00\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00`@abc'
struct.unpack(): 바이트를 데이터로 되돌리기
struct.unpack() 메서드는 바이트를 다시 원래의 파이썬 데이터 타입으로 변환합니다. 이 메서드는 두 개의 인자를 받는데, 첫 번째는 pack() 메서드와 동일한 형식 문자열이고, 두 번째는 struct.pack() 메서드가 반환한 바이트 객체입니다.
struct.unpack()은 항상 결과를 튜플(tuple) 형태로 반환한다는 점에 유의하세요.
예제
# struct 모듈 임포트
import struct
# 바이트로 변환
converted_bytes = struct.pack('14s i', b'Tutorialspoint', 2020)
# 다시 파이썬 데이터 타입으로 변환
print(struct.unpack('14s i', converted_bytes))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
(b'Tutorialspoint', 2020)
정리
지금까지 파이썬 struct 모듈을 사용해 데이터 타입과 바이트를 상호 변환하는 방법을 살펴봤습니다. 네트워크 통신, 파일 입출력, 이진 데이터 처리 등 저수준 데이터 작업을 할 때 struct 모듈은 매우 유용하게 활용됩니다. 튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨주세요.