[파이썬] shutil 사용자 지정 필터를 통한 파일 검색 및 관리

Python의 shutil 모듈은 파일 및 디렉토리 관리를 위한 강력한 도구를 제공합니다. 이 모듈을 사용하면 파일을 복사, 이동, 이름 변경 등을 할 수 있습니다. 그런데 때로는 특정 조건에 맞는 파일들만을 검색하고 관리해야 할 필요가 있을 수 있습니다. 이런 경우에 shutil 모듈의 사용자 지정 필터 기능을 사용하면 효과적으로 파일을 검색하고 관리할 수 있습니다.

파일 필터링

shutil 모듈은 copytree() 함수를 통해 디렉토리 전체를 복사하거나, copy2() 함수를 통해 파일을 복사하는 등의 작업을 수행할 수 있습니다. 그런데 이 함수들은 모든 파일을 복사하거나 이동하며, 특정 파일들만 필터링할 수 있는 기능을 제공하지 않습니다.

하지만 우리는 shutil 모듈의 함수를 활용하여 직접 파일 필터링이 가능한 함수를 만들어 사용할 수 있습니다. 아래는 파일 필터링을 위한 예제 코드입니다.

import os
import shutil

def filter_files(source_dir, dest_dir, file_filter):
    for root, dirs, files in os.walk(source_dir):
        for file in files:
            if file_filter(file):
                source_file = os.path.join(root, file)
                dest_file = os.path.join(dest_dir, file)
                shutil.copy2(source_file, dest_file)

이 코드에서는 source_dir에 있는 모든 파일 중에서 file_filter 함수의 조건을 만족하는 파일만을 dest_dir로 복사합니다. file_filter 함수는 자신이 원하는 조건에 맞는 파일을 필터링하기 위해 사용자가 작성하는 함수입니다.

사용자 지정 필터 사용하기

이제 사용자 지정 필터를 활용하는 예제를 살펴보겠습니다. 아래는 shutil 모듈을 사용하여 특정 확장자를 가진 파일들을 검색하여 복사하는 예제 코드입니다.

import os
import shutil

def filter_files(source_dir, dest_dir, file_extension):
    def file_extension_filter(file):
        return file.endswith(file_extension)

    for root, dirs, files in os.walk(source_dir):
        for file in files:
            if file_extension_filter(file):
                source_file = os.path.join(root, file)
                dest_file = os.path.join(dest_dir, file)
                shutil.copy2(source_file, dest_file)   

위의 코드에서는 filter_files() 함수를 호출할 때, file_extension 매개변수에 원하는 확장자를 전달합니다. 그리고 내부에서 file_extension_filter() 함수를 정의하여 파일 확장자를 검사하는 조건을 만들었습니다. 마지막으로 shutil.copy2() 함수를 통해 복사 작업을 수행합니다.

결론

Python의 shutil 모듈은 파일 및 디렉토리 관리를 위한 강력한 도구입니다. 사용자 지정 필터 기능을 활용하면 원하는 조건을 가진 파일들을 효과적으로 검색하고 관리할 수 있습니다. 위의 예제 코드를 참고하여 필요한 기능을 추가하거나 수정하여 파일 검색 및 관리를 보다 효율적으로 수행해보세요.