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

Python으로 대용량 이진 파일을 여러 개의 파일로 분할하는 방법

큰 용량의 이진(binary) 파일을 여러 개의 파일로 나누려면, 먼저 만들고자 하는 청크(chunk) 크기만큼 원본 파일에서 데이터를 읽어 들인 뒤, 그 청크를 새 파일에 기록합니다. 그다음 청크를 다시 읽고, 원본 파일의 끝에 도달할 때까지 이 과정을 반복하면 됩니다.

기본 원리

파일 분할의 핵심 흐름은 다음과 같습니다.

1. 원본 파일을 지정한 청크 크기만큼 읽습니다.
2. 읽어 온 청크를 새로운 파일에 씁니다.
3. 파일 번호를 증가시키고 다음 청크를 읽습니다.
4. 더 이상 읽을 데이터가 없을 때까지 반복합니다.

예제

예를 들어 my_song.mp3라는 파일이 있고, 이것을 500바이트씩 여러 개의 파일로 나누고 싶다고 가정해 보겠습니다.

CHUNK_SIZE = 500
file_number = 1

with open('my_song.mp3', 'rb') as f:
    chunk = f.read(CHUNK_SIZE)
    while chunk:
        with open('my_song_part_' + str(file_number), 'wb') as chunk_file:
            chunk_file.write(chunk)
        file_number += 1
        chunk = f.read(CHUNK_SIZE)

스크립트 실행이 끝나면 현재 작업 디렉터리에서 my_song_part_라는 접두사가 붙은 여러 개의 분할 파일을 확인할 수 있습니다. 각 파일에는 원본 파일의 일부 데이터가 순서대로 저장되어 있습니다.

주의 사항

MP3처럼 텍스트가 아닌 이진 데이터를 다룰 때는 파일을 반드시 바이너리 모드('rb', 'wb')로 열어야 합니다. 텍스트 모드로 열면 운영체제에 따라 인코딩 처리 과정에서 데이터가 손상될 수 있습니다.

분할된 파일 다시 합치기

분할된 파일들은 순서대로 읽어 하나의 파일에 이어 쓰면 원본 그대로 복원할 수 있습니다.

file_number = 1

with open('my_song_restored.mp3', 'wb') as output:
    while True:
        try:
            with open('my_song_part_' + str(file_number), 'rb') as part:
                output.write(part.read())
            file_number += 1
        except FileNotFoundError:
            break

이렇게 하면 분할 전과 동일한 원본 파일을 얻을 수 있으며, 대용량 파일을 전송하거나 저장 용량 제한이 있는 환경에서 유용하게 활용할 수 있습니다.