파이썬의 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
의 성능을 향상시키세요.