[파이썬] shutil 대용량 압축 파일 분할 및 병합하기

압축 파일을 다루는 작업은 프로그래밍에서 종종 필요한 작업 중 하나입니다. 특히 대용량의 압축 파일을 다루는 경우, 전체 파일을 한 번에 다루는 것은 메모리와 시간적인 측면에서 문제가 될 수 있습니다. 이런 상황에서는 파일을 분할하거나 병합하는 기능이 필요합니다.

이번 글에서는 Python의 shutil 모듈을 사용하여 대용량 압축 파일을 분할하고 병합하는 방법에 대해 알아보겠습니다.

1. 압축 파일 분할하기

대용량 압축 파일을 분할하는 방법은 shutil 모듈의 unpack_archive 함수를 사용하여 간단하게 구현할 수 있습니다. 이 함수는 압축 파일을 특정 디렉토리로 해제합니다. 따라서, 원하는 파일 크기만큼 분할된 압축 파일을 생성하려면, 압축 파일을 특정 디렉토리로 해제한 후, 해당 디렉토리를 압축하여 원하는 파일 크기로 분할된 압축 파일을 생성합니다.

import shutil

def split_archive(archive_path, output_dir, chunk_size):
    shutil.unpack_archive(archive_path, output_dir)
    shutil.make_archive(output_dir, 'zip', output_dir)

위의 예제 코드에서 압축 파일을 분할하려면 split_archive 함수를 호출하여 압축 파일 경로, 출력 디렉토리, 그리고 분할 크기를 전달합니다. 함수는 먼저 압축 파일을 output_dir로 해제한 다음, output_dir 디렉토리를 압축하여 분할된 압축 파일을 생성합니다. 이 함수는 zip 파일을 다루는 예시지만, 다른 형식의 압축 파일에도 동일한 방법으로 적용할 수 있습니다.

2. 압축 파일 병합하기

분할된 압축 파일을 병합하는 방법은 shutil 모듈의 unpack_archive 함수와 유사한 구조를 갖습니다. 병합하려는 압축 파일이 존재하는 디렉토리에서 다시 압축을 풀고, 해당 디렉토리를 다시 압축하여 전체 압축 파일을 생성합니다.

import shutil

def merge_archives(input_dir, output_path):
    shutil.unpack_archive(input_dir, input_dir)
    shutil.make_archive(output_path, 'zip', input_dir)

압축 파일을 병합하려면 merge_archives 함수를 호출하여 입력 디렉토리 경로와 출력 파일 경로를 전달합니다. 함수는 먼저 입력 디렉토리에 위치한 압축 파일을 해제한 다음, 해당 디렉토리를 다시 압축하여 전체 압축 파일을 생성합니다.

3. 결과 확인하기

위의 코드를 사용하여 압축 파일을 분할하고 병합할 수 있습니다. 이 때, 원본 압축 파일의 크기가 분할 크기와 비교하여 파일의 분할 여부를 결정하면 됩니다. 분할된 압축 파일의 크기가 원하는 크기와 같다면, 분할이 제대로 이루어진 것입니다.

아래는 split_archivemerge_archives 함수를 사용하여 압축 파일을 분할하고 병합하는 예시입니다.

split_archive('large_archive.zip', 'output_dir', 100)
merge_archives('output_dir', 'merged_archive.zip')

위의 코드는 large_archive.zip 파일을 100MB 크기로 분할한 뒤, 다시 merged_archive.zip 파일로 병합합니다.

Python의 shutil 모듈을 사용하여 대용량 압축 파일을 분할하고 병합하는 방법에 대해 알아보았습니다. 이러한 기능을 이용하여 압축 파일을 효율적으로 처리할 수 있습니다.