[파이썬] 바이너리 파일의 읽기와 쓰기

파이썬은 다양한 파일 형식을 처리할 수 있는 강력한 언어입니다. 이 중에서 바이너리 파일은 특히 복잡한 구조와 다양한 데이터를 포함할 수 있어 관리하기가 어려울 수 있습니다. 이번 블로그 포스트에서는 파이썬에서 바이너리 파일을 읽고 쓰는 방법에 대해 알아보겠습니다.

바이너리 파일 읽기

바이너리 파일을 읽기 위해서는 open() 함수를 사용합니다.

with open("파일명", "rb") as file:
    data = file.read()

위 코드에서 “rb”는 바이너리 모드로 파일을 열라는 의미입니다. read() 메서드를 사용하여 파일 전체를 읽어서 data 변수에 저장합니다. 이렇게 하면 바이너리 파일의 내용을 메모리에 로드할 수 있습니다.

바이너리 파일은 주로 구조화된 데이터를 담고 있으므로, 다양한 자료형에 따라 데이터를 해석해야 합니다. 예를 들어, 4바이트의 정수 값을 읽기 위해서는 struct 모듈을 사용할 수 있습니다.

import struct

with open("파일명", "rb") as file:
    data = file.read(4)  # 4바이트 읽기
    value = struct.unpack('i', data)[0]  # 바이너리 데이터를 정수로 변환
    
print(value)

위의 예제에서 read(4)로 4바이트 데이터를 읽고, unpack() 함수로 정수로 변환합니다. unpack() 함수의 첫 번째 매개변수는 형식 문자열이며, 'i'는 4바이트 정수를 의미합니다. 반환된 튜플의 첫 번째 값을 [0]으로 접근하여 정수 값을 얻을 수 있습니다.

바이너리 파일 쓰기

바이너리 파일을 생성하고 데이터를 기록하려면 open() 함수를 다음과 같이 사용합니다.

with open("파일명", "wb") as file:
    data = b'\x41\x42\x43\x44'  # 바이너리 데이터
    file.write(data)

위의 코드에서 “wb”는 바이너리 쓰기 모드로 파일을 열라는 의미입니다. 이제 write() 메서드를 사용하여 바이너리 데이터를 파일에 기록합니다. 데이터는 b'\x41\x42\x43\x44'와 같은 형식으로 표현되며, 각 바이트는 \x 접두사와 16진수로 표현됩니다.

구조화된 데이터를 쓰기 위해서는 pack() 함수를 사용할 수 있습니다. pack() 함수의 첫 번째 매개변수는 형식 문자열이며, 'i'는 4바이트 정수를 의미합니다.

import struct

with open("파일명", "wb") as file:
    value = 10
    data = struct.pack('i', value)  # 정수를 바이너리 데이터로 변환
    file.write(data)

위의 예제에서는 pack() 함수로 정수 값을 바이너리 데이터로 변환한 후, write() 메서드를 통해 파일에 기록합니다.

마무리

파이썬을 사용하여 바이너리 파일을 읽고 쓰는 방법을 알아보았습니다. open() 함수를 사용하여 파일을 열고, read()write() 메서드를 통해 바이너리 데이터를 읽고 쓸 수 있습니다. struct 모듈을 사용하여 데이터를 구조화하거나 해석할 수도 있습니다. 바이너리 파일을 다룰 때는 항상 파일에 대한 접근 권한 및 안전성을 고려해야 합니다. 이를 염두에 두고 안전하게 파일을 다루는 것이 중요합니다.