파이썬의 shutil
라이브러리는 파일 및 디렉토리 작업을 위한 많은 유틸리티 함수를 제공합니다. 이 중에서도 압축과 압축 해제 기능은 자주 사용되는 기능 중 하나입니다. shutil
모듈을 사용하면 간단하게 파일이나 디렉토리를 압축하거나 압축 해제할 수 있습니다.
하지만 때로는 기본 동작만으로는 부족할 수 있습니다. 사용자 정의 동작을 정의하고 싶을 때가 있을 것입니다. 이번 글에서는 shutil
을 사용하여 압축과 압축 해제를 진행하는 중간에 사용자 정의 동작을 추가하는 방법에 대해 알아보겠습니다.
1. 압축하기 전 사용자 정의 동작 추가하기
shutil.make_archive
함수를 사용하여 파일이나 디렉토리를 압축할 수 있습니다. 이 함수를 사용하는 도중에 사용자 정의 동작을 추가하려면 archive_util
모듈의 Archiver
클래스를 상속하여 새로운 클래스를 만들어야 합니다. 그리고 사용자 정의 동작을 위한 메소드를 정의한 다음 해당 메소드를 오버라이딩하면 됩니다.
import shutil
from shutil import make_archive, archive_util
class CustomArchiver(archive_util.Archiver):
def update(self, base_name, root_dir, base_dir, verbose=False, dry_run=False, **kwargs):
# 여기에 사용자 정의 동작을 추가합니다.
# base_name: 압축 파일 이름
# root_dir: 압축 대상 디렉토리
# base_dir: 압축 대상 디렉토리 내의 서브 디렉토리
# verbose: 상세 모드 여부
# dry_run: 압축 없이 시뮬레이션 모드 여부
# kwargs: 사용자 지정 매개변수
# 사용자 정의 동작을 수행하는 코드 작성
print("압축하기 전에 사용자 정의 동작을 수행합니다.")
# ...
# 이후에는 기본 동작을 계속합니다.
super().update(base_name, root_dir, base_dir, verbose, dry_run, **kwargs)
# 압축하기 위한 기본 동작을 키우기 위해 새로운 클래스를 사용합니다.
shutil.register_archive_format('custom', CustomArchiver)
위 예제에서는 CustomArchiver
클래스를 정의한 후, update
메소드를 오버라이딩하여 사용자 정의 동작을 추가하였습니다. 이 메소드는 압축 과정에서 호출되며, 여기에 사용자가 원하는 작업을 추가할 수 있습니다. 이후 register_archive_format
함수를 사용하여 새로 정의한 압축 포맷을 등록합니다.
2. 압축 해제 후 사용자 정의 동작 추가하기
shutil.unpack_archive
함수를 사용하여 압축 해제를 할 수 있습니다. 마찬가지로 압축 해제 후에 사용자 정의 동작을 추가하려면 archive_util
모듈의 UnArchiver
클래스를 상속하여 새로운 클래스를 만들어야 합니다.
import shutil
from shutil import unpack_archive, archive_util
class CustomUnArchiver(archive_util.UnArchiver):
def update(self, filename, extract_dir, verbose=False, dry_run=False):
# 여기에 사용자 정의 동작을 추가합니다.
# filename: 압축 파일 이름
# extract_dir: 압축 해제될 디렉토리
# verbose: 상세 모드 여부
# dry_run: 압축 해제 없이 시뮬레이션 모드 여부
# 사용자 정의 동작을 수행하는 코드 작성
print("압축 해제 후에 사용자 정의 동작을 수행합니다.")
# ...
# 이후에는 기본 동작을 계속합니다.
super().update(filename, extract_dir, verbose, dry_run)
# 압축 해제하기 위한 기본 동작을 키우기 위해 새로운 클래스를 사용합니다.
shutil.register_unpack_format('custom', ['.ext'], CustomUnArchiver)
위 예제에서는 CustomUnArchiver
클래스를 정의한 후, update
메소드를 오버라이딩하여 사용자 정의 동작을 추가하였습니다. 이 메소드는 압축 해제 과정에서 호출되며, 여기에 사용자가 원하는 작업을 추가할 수 있습니다. 이후 register_unpack_format
함수를 사용하여 새로 정의한 압축 해제 포맷을 등록합니다.
마무리
파이썬의 shutil
라이브러리를 사용하여 압축과 압축 해제 작업을 수행하는 동안 사용자 정의 동작을 추가하는 방법을 살펴보았습니다. Archiver
및 UnArchiver
클래스를 상속하고 새로운 클래스를 만들어 사용자 정의 동작을 구현할 수 있습니다. 이를 통해 기본 동작을 확장하고 원하는 작업을 수행할 수 있습니다.
더 자세한 내용은 파이썬 공식 문서를 참조하시기 바랍니다.