Python shutil 모듈을 이용한 파일과 폴더 관리
Python shutil 모듈을 이용한 파일과 폴더 관리
Python의 shutil
모듈은 고수준의 파일 및 디렉토리 작업을 처리할 수 있는 강력한 도구입니다. 이 모듈은 특히 파일을 복사하거나, 디렉토리를 재귀적으로 삭제하고, 파일을 이동하는 등의 작업에 매우 유용합니다. 이번 글에서는 shutil
모듈을 이용하여 파일과 폴더를 어떻게 관리할 수 있는지 알아보겠습니다.
1. shutil
모듈 임포트
shutil
모듈을 사용하려면 먼저 shutil
을 임포트해야 합니다.
import shutil
2. 파일 작업
2.1 파일 복사
shutil.copy()
함수는 파일을 복사하는 데 사용됩니다. 복사된 파일은 원본 파일과 동일한 내용을 가지며, 파일의 메타데이터(예: 권한)도 복사됩니다.
'source.txt', 'destination.txt')
shutil.copy(print("파일이 복사되었습니다.")
shutil.copy()
는 원본 파일의 데이터를 복사하지만, 파일 메타데이터는 복사하지 않습니다.- 만약 파일 권한까지 함께 복사하려면
shutil.copy2()
를 사용해야 합니다.
'source.txt', 'destination.txt')
shutil.copy2(print("파일과 메타데이터가 복사되었습니다.")
2.2 파일 이동
shutil.move()
는 파일을 다른 디렉토리로 이동하거나, 파일의 이름을 변경하는 데 사용됩니다.
'source.txt', 'new_folder/source.txt')
shutil.move(print("파일이 이동되었습니다.")
이 함수는 파일 이동뿐만 아니라 디렉토리 이동에도 사용할 수 있으며, 같은 이름으로 파일을 옮길 경우 이름을 변경하는 기능도 수행합니다.
2.3 파일 삭제
shutil
모듈은 파일 삭제 기능을 제공하지 않지만, Python의 기본 os.remove()
함수를 함께 사용하여 파일을 삭제할 수 있습니다.
import os
'source.txt')
os.remove(print("파일이 삭제되었습니다.")
3. 디렉토리 작업
3.1 디렉토리 복사
shutil.copytree()
함수는 디렉토리와 그 안에 있는 모든 파일 및 하위 디렉토리를 복사합니다.
'source_folder', 'destination_folder')
shutil.copytree(print("디렉토리가 복사되었습니다.")
- 주의:
copytree()
는 원본 디렉토리 내의 모든 파일 및 하위 디렉토리까지 복사하므로, 대용량의 디렉토리를 복사할 경우 처리 시간이 오래 걸릴 수 있습니다.
3.2 디렉토리 이동
shutil.move()
를 사용하여 디렉토리를 다른 위치로 이동할 수 있습니다.
'source_folder', 'new_location/source_folder')
shutil.move(print("디렉토리가 이동되었습니다.")
shutil.move()
는 디렉토리 구조를 유지한 채로 전체 디렉토리를 이동시킵니다.
3.3 디렉토리 삭제
shutil.rmtree()
함수는 디렉토리와 그 안에 있는 모든 파일을 재귀적으로 삭제합니다. 디렉토리가 비어 있지 않아도 삭제할 수 있는 기능을 제공하므로 매우 강력하지만, 실수로 중요한 데이터를 삭제하지 않도록 주의해야 합니다.
'source_folder')
shutil.rmtree(print("디렉토리가 삭제되었습니다.")
3.4 디렉토리 내용 삭제
특정 디렉토리의 내용만 삭제하고, 디렉토리 자체는 유지하고 싶다면 os.listdir()
과 shutil.rmtree()
를 함께 사용할 수 있습니다.
import os
= 'source_folder'
folder
for filename in os.listdir(folder):
= os.path.join(folder, filename)
file_path try:
if os.path.isfile(file_path) or os.path.islink(file_path):
# 파일 삭제
os.unlink(file_path) elif os.path.isdir(file_path):
# 디렉토리 삭제
shutil.rmtree(file_path) except Exception as e:
print(f'파일 {file_path} 삭제 중 오류 발생: {e}')
이 코드는 source_folder
안에 있는 모든 파일과 폴더를 삭제하지만, source_folder
디렉토리 자체는 삭제하지 않습니다.
4. 압축 및 해제 작업
4.1 디렉토리 압축
shutil
모듈을 사용하면 디렉토리를 쉽게 압축할 수 있습니다. shutil.make_archive()
함수는 디렉토리를 ZIP 또는 TAR 같은 형식으로 압축합니다.
'archive_name', 'zip', 'source_folder')
shutil.make_archive(print("디렉토리가 압축되었습니다.")
- 첫 번째 인자는 압축 파일의 이름이고, 두 번째 인자는 압축 형식입니다(
zip
,tar
등). 세 번째 인자는 압축할 디렉토리의 경로입니다.
4.2 압축 해제
shutil.unpack_archive()
를 사용하여 압축 파일을 해제할 수 있습니다.
'archive_name.zip', 'output_folder')
shutil.unpack_archive(print("압축이 해제되었습니다.")
이 함수는 지원하는 여러 압축 형식(zip
, tar
, gztar
, bztar
등)을 해제할 수 있으며, 두 번째 인자로 해제된 파일을 저장할 위치를 지정합니다.
5. 디스크 사용량 확인
shutil.disk_usage()
함수는 특정 경로에 대한 디스크 사용량 정보를 제공합니다.
= shutil.disk_usage('/')
total, used, free print(f"총 용량: {total // (2**30)} GiB")
print(f"사용 중: {used // (2**30)} GiB")
print(f"남은 용량: {free // (2**30)} GiB")
이 함수는 바이트 단위로 총 용량, 사용 중인 용량, 남은 용량을 반환하며, 디스크 사용량을 확인하는 데 유용합니다.