[파이썬] shutil 다양한 환경에서의 `shutil` 성능 최적화

파이썬의 shutil 모듈은 파일 및 디렉토리 작업을 처리하는 데 매우 유용한 도구입니다. 그러나 일부 환경에서는 shutil의 성능이 저하될 수 있습니다. 이에 대한 최적화 기술을 알아보겠습니다.

1. shutil.copy() 대신 shutil.copy2() 사용하기

shutil.copy() 함수는 파일을 복사하기 위해 사용될 수 있지만, 자세한 메타데이터(파일 권한, 수정 시간 등)를 복사하지는 않습니다. 따라서 파일의 모든 메타데이터를 복사하려면 shutil.copy2() 함수를 사용해야 합니다. shutil.copy2()를 사용하면 원본 파일과 동일한 메타데이터를 가진 대상 파일이 생성됩니다.

import shutil

shutil.copy2('source_path', 'destination_path')

2. shutil.move() 대신 shutil.copy()os.remove() 사용하기

shutil.move() 함수는 파일을 이동시키기 위해 사용될 수 있지만, 일부 환경에서는 성능이 저하될 수 있습니다. 대신 shutil.copy() 함수를 사용하여 파일을 복사하고, 이후 os.remove() 함수를 사용하여 원본 파일을 삭제하는 것이 좋습니다.

import shutil
import os

shutil.copy('source_path', 'destination_path')
os.remove('source_path')

3. Bulk 파일 복사 시 shutil.copytree() 대신 shutil.copy2() 사용하기

여러 파일을 복사해야 하는 경우 shutil.copytree() 함수를 사용할 수 있지만, 성능 저하가 발생할 수 있습니다. 따라서 대신 shutil.copy2() 함수를 사용하여 각 파일을 복사하는 것이 더 효율적입니다.

import shutil
import os

source_dir = 'source_directory'
destination_dir = 'destination_directory'

for root, dirs, files in os.walk(source_dir):
    for file in files:
        source_path = os.path.join(root, file)
        destination_path = os.path.join(destination_dir, os.path.relpath(source_path, source_dir))
        shutil.copy2(source_path, destination_path)

4. shutil.rmtree() 대신 직접 디렉토리 삭제하기

shutil.rmtree() 함수는 디렉토리와 하위 파일을 삭제하기 위해 사용될 수 있지만, 일부 환경에서는 성능 저하가 발생할 수 있습니다. 대신 직접 os.remove() 함수를 사용하여 디렉토리 내의 파일을 하나씩 삭제한 후, 마지막에 빈 디렉토리를 삭제하는 것이 더 효율적입니다.

import os

def delete_directory(directory):
    for root, dirs, files in os.walk(directory, topdown=False):
        for file in files:
            file_path = os.path.join(root, file)
            os.remove(file_path)
    os.rmdir(directory)

결론

shutil은 파일 및 디렉토리 작업을 간편하게 처리할 수 있는 파이썬 라이브러리입니다. 그러나 성능 저하가 발생할 수 있는 환경에서는 몇 가지 최적화 기술을 적용하여 성능을 향상시킬 수 있습니다. 본 블로그 포스트에서는 shutil.copy() 대신 shutil.copy2() 사용하기, shutil.move() 대신 shutil.copy()os.remove() 사용하기, Bulk 파일 복사 시 shutil.copytree() 대신 shutil.copy2() 사용하기, 그리고 shutil.rmtree() 대신 직접 디렉토리 삭제하기 등의 기술을 알아보았습니다. 이러한 최적화 기술을 적용하여 shutil의 성능을 향상시키세요.