[파이썬] shutil 압축 해제시 특정 폴더나 파일 제외하기

압축 파일을 해제할 때, 때로는 특정 폴더나 파일을 제외하고 싶을 수 있습니다. Python의 shutil 모듈을 사용하여 압축 파일을 해제할 때 특정 폴더나 파일을 제외하는 방법을 알아보겠습니다.

1. shutil 모듈 이해하기

shutil 모듈은 파일 및 디렉터리 작업에 사용되는 유용한 함수와 클래스를 포함하고 있습니다. 우리가 이번에 다룰 함수는 shutil.unpack_archive()입니다. 이 함수를 사용하여 압축 파일을 해제할 수 있습니다.

2. shutil.unpack_archive() 함수 이용하기

shutil.unpack_archive(filename, extract_dir=None, format=None, members=None) 함수를 사용하여 압축 파일을 해제할 수 있습니다. 여기서 filename은 압축 파일의 경로 및 파일 이름이고, extract_dir은 압축 해제될 디렉터리 경로입니다.

3. 특정 폴더나 파일 제외하기

특정 폴더나 파일을 제외하려면, members 매개변수를 사용하여 압축 파일의 멤버 목록을 지정해야 합니다. 이 멤버 목록에는 압축 파일 내의 폴더 및 파일 경로를 포함하며, 이와 일치하는 멤버는 해제되지 않습니다.

import shutil

def unpack_zip_with_exclude(filename, extract_dir, exclude_paths):
    # 압축 파일 해제
    shutil.unpack_archive(filename, extract_dir)

    # 제외할 폴더/파일 제거
    for path in exclude_paths:
        full_path = os.path.join(extract_dir, path)
        if os.path.isdir(full_path):
            shutil.rmtree(full_path)
        elif os.path.isfile(full_path):
            os.remove(full_path)

# 사용 예시
filename = 'archive.zip' # 압축 파일 이름
extract_dir = 'destination_folder' # 압축 해제할 디렉터리 경로
exclude_paths = ['folder_to_exclude', 'file_to_exclude.txt'] # 제외할 폴더/파일 경로 목록

unpack_zip_with_exclude(filename, extract_dir, exclude_paths)

위의 코드에서 unpack_zip_with_exclude() 함수는 압축 파일을 해제하고, 제외할 폴더와 파일을 제거합니다. exclude_paths 리스트에는 제외할 폴더와 파일의 경로를 지정하여 해당 항목들을 제외합니다.

마무리

Python의 shutil 모듈을 활용하여 압축 파일을 해제할 때 특정 폴더나 파일을 제외하는 방법을 알아보았습니다. 이를 통해 필요한 부분만 선택적으로 압축 해제할 수 있습니다. 따라서 여러 파일이 들어있는 압축 파일을 다룰 때 효율적인 작업을 할 수 있습니다.