[파이썬] 파일의 이진 데이터 읽기와 쓰기 위치 이동

Python은 파일을 이진 데이터로 읽고 쓸 수 있는 강력한 기능을 제공합니다. 이진 데이터는 텍스트 데이터가 아닌 0과 1로 이루어진 데이터로, 이미지, 동영상, 사운드 등의 다양한 형식으로 저장되어 있는 파일을 처리하는 데에 유용합니다.

파일 열기와 닫기

파일을 읽거나 쓰기 위해서는 open() 함수를 사용하여 파일을 열어야 합니다. 파일을 열 때는 해당 파일의 경로와 모드를 지정해야 합니다. 모드는 파일을 어떤 방식으로 열 건지를 결정하며, 일반적으로 rb (이진 데이터 읽기), wb (이진 데이터 쓰기)와 같이 사용됩니다. 파일 처리가 끝났을 때는 close() 메소드를 호출하여 파일을 닫아야 합니다.

file = open("file.bin", "rb")
# 파일 읽기 작업 수행

file.close()

이진 데이터 읽기

이진 파일을 읽을 때는 read() 메소드를 사용하여 파일의 내용을 읽어옵니다. read() 메소드는 파일의 크기나 지정된 바이트 수만큼 읽을 수 있습니다. 읽은 데이터는 바이너리 형식으로 반환됩니다.

file = open("file.bin", "rb")
data = file.read()
file.close()

또는 readinto() 메소드를 사용하여 지정된 바이트 수만큼 읽은 데이터를 기존의 바이트 배열에 저장할 수도 있습니다.

file = open("file.bin", "rb")
buffer = bytearray(1024)  # 1024 바이트로 이루어진 바이트 배열 생성
bytes_read = file.readinto(buffer)
file.close()

이진 데이터 쓰기

이진 파일에 데이터를 쓸 때는 write() 메소드를 사용하여 데이터를 파일에 씁니다. 데이터는 바이너리 형식으로 입력되어야 합니다. 파일에 데이터를 쓰면 해당 파일의 끝에 추가되며, 이미 파일이 존재하는 경우 덮어씌워집니다.

file = open("file.bin", "wb")
data = b"Hello, world!"  # 바이너리 형식으로 데이터 설정
file.write(data)
file.close()

쓰기 위치 이동

파일의 쓰기 위치를 이동하고 싶을 때는 seek() 메소드를 사용합니다. seek() 메소드의 첫 번째 매개변수는 쓰기 위치를 지정하는데, 0은 파일의 처음, 1은 현재 위치, 2는 파일의 끝을 나타냅니다. 두 번째 매개변수는 기준 위치에서 얼마나 이동할지를 지정합니다.

file = open("file.bin", "wb")
file.write(b"Hello, ")
file.seek(0, 2)  # 파일의 끝으로 이동
file.write(b"world!")
file.close()

위의 예제에서는 처음에 “Hello, “를 파일에 썼고, seek() 메소드를 사용하여 파일의 끝으로 이동한 후 “world!”를 추가로 썼습니다. 결과적으로 파일에는 “Hello, world!”가 저장됩니다.

이진 데이터를 읽고 쓰면서 파일의 위치를 제어하는 기능은 파일 처리에 유용하게 사용됩니다. 위에서 설명한 기능들을 활용하여 다양한 작업을 수행할 수 있습니다. 자세한 내용은 Python 공식 문서를 참조하시기 바랍니다.